AngularJS下拉列表未显示所选值
AngularJS dropdown not showing selected value
在角度下拉列表中显示所选值时遇到问题。当我像这样给出时,它就起作用了
$scope.selectedItem = $scope.items[1];
不起作用,如果我直接给这个值
$scope.selectedItem = { name: 'two', age: 27 };
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>
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];
});
代码:http://codepen.io/anon/pen/zxXpmR
解决方案:
谢谢你,亲爱的。我按照你的建议解决了。
var choosen_value = { name: 'two', age: 27 };
angular.forEach($scope.items, function(item){
if(angular.equals(choosen_value, item)){
$scope.selectedItem = item;
}
});
如其他答案所述,虽然这两个对象可能具有相同的属性和值,但它们是两个不同的对象,因此angular不认为它们相等。
但是,您可以在ng选项中使用track by
表达式来指定将决定相等性的属性:
ng-options="item.name for item in items track by item.name"
http://codepen.io/anon/pen/WbWMrp
好吧,因为
CCD_ 3和CCD_。
{ name: 'two', age: 27 }
是完全不同的对象,而$scope.items[1]
是对象$scope.items
的一部分
当您使用{{}}
将某个内容放入模板中时,angular会将其添加到其观察者列表中。
所以当angular把它放在观察列表中时,它是一个不同于$scope.items
的对象(即{ name: 'two', age: 27 }
)。
selectedItem
与您在控制器中设置的对象附着在一起。总之,在脏检查时,angular将对照{ name: 'two', age: 27 }
检查selectedItem
,而不是对照$scope.items
希望你能理解我的意思
这不是一个角度特性/问题,而是Javascript中对象平等工作方式的结果。这篇文章以非常简洁的方式很好地解释了正在发生的事情,并给出了一些例子。查看lodash的isEqual方法的来源(它最终将带您了解baseIsEqualDeep
的定义),看看如何在纯JS中实现您想要实现的目标。
无论如何,我不认为在Angular中有一种简单的方法可以实现这一点,你必须重写ng-options
的工作方式,你可能不想去那里。。。
在angular中,数组和对象通过引用传递,而字符串、数字和布尔值通过值传递。因此,angular将$scope.items[1]
和{ name: 'two', age: 27 }
解释为两个不同的对象。这就是当您直接执行$scope.selectedItem = { name: 'two', age: 27 };
并在"$scope.items"中找到它时绑定失败的原因。
- 如何在按钮中显示下拉列表中选定的元素
- KendoUI 工具栏拆分按钮会自动突出显示下拉列表中的第一个选项.如何使所有选项看起来相同
- 所选多选在首次单击时不显示下拉列表
- jQuery 自动完成:首次键入后不显示下拉列表
- 单击其他元素(文本输入)时显示下拉列表
- 在索引上显示下拉列表更改了另一个下拉列表 .net 2.0
- 如何在jQuery弹出窗口中显示下拉列表选择列表并检索所选值
- 每次单击按钮时显示下拉列表
- 从 URL 获取选项值,以显示下拉列表中的特定菜单项
- 如何以大写字母单独显示下拉列表的选定值
- jQuery函数,一个用于在单击时显示下拉列表,另一个用于从下拉列表中获取所选项目
- 在jsp页面中显示下拉列表的选定值
- jquery时间选择器不显示下拉列表
- 根据正确选择的单选按钮显示下拉列表
- Javascript隐藏/显示下拉列表中的项目
- 如何在asp.net中显示下拉列表的所有项
- 停止chrome显示下拉列表时,单击一个选择
- jQuery -点击链接时不能显示下拉列表
- 如何在角材质的对话框内容中显示下拉列表/下拉列表/选择列表?
- 在模式窗口MVC4上显示下拉列表