【问题标题】:AngularJS select not showing model objectAngularJS选择不显示模型对象
【发布时间】:2013-06-10 12:15:32
【问题描述】:

如果我在对象值中硬编码如下所示,AngularJS 似乎没有显示我的默认值(模型)。

html

<select ng-model="defaultOption" ng-options="o.vala for o in options"></select>

javascript

$scope.options = [ 
    {vala: "value1a", valb: "value1b"}, 
    {vala: "value2a", valb: "value2b"} 
];
$scope.defaultOption = {vala: "value1a", valb: "value1b"};

但是,如果我将 $scope.defaultOption 更改为 $scope.options[0],我的默认选项会显示在 select 上没问题。

为什么会发生这种情况,有什么办法可以保留

$scope.defaultOption = {vala: "value1a", valb: "value1b"};

而不是使用间接引用?

jsfiddle:http://jsfiddle.net/64ycY/8/

(取消注释另一个 $scope.defaultOption 以进行比较)

【问题讨论】:

  • 我认为是因为angularjs在这里寻找对象相等
  • @ArunPJohny 是对的。您可以创建一个函数(或从 underscore.js 获取)并使用 that$scope.options 中查找与您的对象匹配的元素。
  • @Dogbert 如果你能提供一个例子,那就太好了。我不太清楚如何在使用 select 时让 angularjs 引用一个函数。
  • @dk123,请查看我的回答。

标签: javascript angularjs


【解决方案1】:

这是一种可能的解决方案,正如上面问题 cmets 中所讨论的那样,使用 underscore.js(实际上可以用一个小函数来完成,而不是拉入 underscore.js)

var app = angular.module('myApp', []);

app.controller('MainController', function($scope) {
    $scope.options = [ 
        {vala: "value1a", valb: "value1b"}, 
        {vala: "value2a", valb: "value2b"} 
    ];
    var setDefaultOption = function(option) {
        $scope.defaultOption = _.findWhere($scope.options, option);
    }
    setDefaultOption({vala: "value1a", valb: "value1b"});
});

http://jsfiddle.net/Dogbert/64ycY/9/

【讨论】:

  • 下划线很棒,但仅仅为此可能有点过分了。在此处查看本机解决方案:jsfiddle.net/Zmetser/57Vk4
  • @OlivérKovács,我认为您的代码只是比较一个属性,而 OP 想要匹配对象的所有属性。
  • 你是对的,我的解决方案假设每个项目都有自己的 ID。如果这个假设不正确,它就行不通。
  • 感谢您的回复,我期待对象的所有属性都符合您的假设。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-22
  • 1970-01-01
相关资源
最近更新 更多