Javascript AngularJS选择不显示模型对象

Javascript AngularJS选择不显示模型对象,javascript,angularjs,Javascript,Angularjs,AngularJS似乎没有显示select的默认值(模型),如果我硬编码对象值,如下所示 html: <select ng-model="defaultOption" ng-options="o.vala for o in options"></select> $scope.options = [ {vala: "value1a", valb: "value1b"}, {vala: "value2a", valb: "value2b"} ]; $s

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

html

<select ng-model="defaultOption" ng-options="o.vala for o in options"></select>
$scope.options = [ 
    {vala: "value1a", valb: "value1b"}, 
    {vala: "value2a", valb: "value2b"} 
];
$scope.defaultOption = {vala: "value1a", valb: "value1b"};
但是,如果我将
$scope.defaultOption
更改为
$scope.options[0]
,我的默认选项将显示在“选择无问题”菜单上

为什么会发生这种情况,我有没有办法保持下去

$scope.defaultOption={vala:“value1a”,valb:“value1b”}

而不是使用间接引用

jsfiddle:


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

这里有一个可能的解决方案,如上面问题注释中所讨论的,使用下划线.js(实际上可以使用一个小函数而不是拉入下划线.js)


我认为这是因为angularjs正在寻找对象相等性here@ArunPJohny这是对的。您可以创建一个函数(或从underline.js中获取),并使用该函数在
$scope.options
@Dogbert中查找与您的对象匹配的元素。如果您可以提供一个示例,那就太好了。我不知道如何在使用select时使angularjs引用一个函数。@dk123,请检查我的答案。下划线很好,但仅此一点可能有点过分。在这里查看本机解决方案:@OlivérKovács,我认为您的代码只是比较一个属性,而OP希望匹配对象的所有属性。您是对的,我的解决方案假设每个项都有自己的ID。如果此假设不正确,它将不起作用。感谢您的回复,我希望对象的所有属性都像您假设的那样匹配。谢谢
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"});
});