【发布时间】:2016-06-01 21:18:59
【问题描述】:
完整说明: 我有具有多个属性的选项列表(不仅仅是键值对):
[
{
id: 1,
name: "111",
some: "qqq"
},
{
id: 2,
name: "222",
some: "www"
}
];
并选择定义为:
<select name="mySelect" id="mySelect"
ng-options="option.name for option in opts track by option.id"
ng-model="mod1"></select>
根据应用逻辑,额外属性可能会发生变化:
{
id: 2,
name: "222",
some: "www1"
}
但 Select 中的实际列表并没有改变! 但是,如果名称更改,则整个 optionList 将被刷新。
简而言之,您可以在 JSFiddle 或 JSFiddle 上查看演示。我准备了两个非常相似的例子:
- 单击按钮时,只会更新额外的属性
- 单击按钮时 - 额外的属性和键都会收到新值
有人知道解决办法吗?
更新
现在我正在使用update + delay + update 解决方案解决这个问题:
this.click = function(){
$scope.opts = {};
$timeout(function() {
$scope.opts = { /* NEW OBJECT */};
}, 0);
}
【问题讨论】:
-
这在文档页面上有详细讨论:docs.angularjs.org/api/ng/directive/ngOptions。 “请注意,$watchCollection 对对象的属性(或集合中的项目,如果模型是数组)进行浅比较。这意味着更改比对象/集合内的第一级更深的属性不会触发重新渲染”
-
嗯,谢谢指出。我虽然“第一级”是指所有属性,但不包括对象,例如
{name: "111", id: 1, some: {name: "111-1", id: "1-1"}}。所以在这种情况下,some.name的变化应该被忽略......
标签: angularjs ng-options angularjs-ng-options