Raj*_*oit 9 javascript arrays json angularjs ng-options
在角度下拉列表中显示选定值时遇到问题.当我给这样的时候它起作用
$scope.selectedItem = $scope.items[1];
Run Code Online (Sandbox Code Playgroud)
如果我直接给出那个价值,那就不行了
$scope.selectedItem = { name: 'two', age: 27 };
Run Code Online (Sandbox Code Playgroud)
HTML:
<html ng-app="app">
<body>
<div ng-controller="Test">
<select ng-model="selectedItem" ng-options="item.name for item in items">
</select>
</div>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
JS:
var app = angular.module('app',[]);
app.controller('Test',function($scope){
$scope.items = [{name: 'one', age: 30 },{ name: 'two', age: 27 },{ name: 'three', age: 50 }];
$scope.selectedItem = $scope.items[1];
});
Run Code Online (Sandbox Code Playgroud)
CODEPEN: http ://codepen.io/anon/pen/zxXpmR
解:
谢谢samir-das.我根据你的建议修好了.
var choosen_value = { name: 'two', age: 27 };
angular.forEach($scope.items, function(item){
if(angular.equals(choosen_value, item)){
$scope.selectedItem = item;
}
});
Run Code Online (Sandbox Code Playgroud)
好吧,因为
$scope.items[1]并且{ name: 'two', age: 27 }是完全不同的事情.
{ name: 'two', age: 27 }是一个完全不同的对象,而是对象$scope.items[1]的一部分$scope.items
当您使用模板中的东西时{{}},将其添加到其观察者列表中.
因此,当角度将其放入观察列表时,它是一个{ name: 'two', age: 27 }不同于的对象(即)$scope.items.
selectedItem与您在控制器中设置的对象相关联.在同时总结脏检查,角意愿检查selectedItem针对 { name: 'two', age: 27 }不反对$scope.items
希望你明白我的意思
正如在其他答案中所解释的那样,虽然两个对象可能具有相同的属性和值,但它们是两个不同的对象,因此angular不认为它们是相等的.
但是,您可以使用ng-options中的track by表达式来指定将决定相等性的属性:
ng-options="item.name for item in items track by item.name"
http://codepen.io/anon/pen/WbWMrp
| 归档时间: |
|
| 查看次数: |
13730 次 |
| 最近记录: |