理想情况下,我想通过computed属性填充数组。例如,
Object.defineProperty(MyObj.prototype, 'linkedList', {
get: function () {
var list = [];
this.dataList.forEach(function (cs) {
if (cs !== this) {
list.push(cs.name);
}
});
return list;
}
});
但是,如果我使用此计算属性作为选择选项,如
<select data-ng-model="name" data-ng-options="g for g in myObj.linkedList"></select>
我会收到此错误:
Error: 10 $digest() iterations reached. Aborting!
事实上,即使我返回一个固定列表,我仍然会收到此错误:
Object.defineProperty(MyObj.prototype, 'linkedList', {
get: function () {
return ['test1', 'test2'];
}
});
但是,如果我返回一个静态数组就可以了:
MyObj._linkedList = ['test1', 'test2'];
Object.defineProperty(MyObj.prototype, 'linkedList', {
get: function () {
return MyObj._linkedList;
}
});
我还尝试在ngOptions中使用过滤器,并抛出相同的错误。为什么和如何?
更新:
事实证明,我上面的原始问题并没有真正反映出问题,因为问题只有在我使用指令时才会发生。为简化问题,我删除了指令部分。
无论如何,在我的指令中,我有
scope: {
name: '=',
isEditing: '=',
isHidden: '=',
options: '='
}
<div>
<div data-ng-hide="!isHidden" style="background-color: lightgrey"> </div>
<div data-ng-show="!isEditing && !isHidden">{{name}}</div>
<select class="select-input" data-ng-show="isEditing && !isHidden" data-ng-model="name" data-ng-options="g for g in {{options}}"><option value=""></option></select>
</div>
以下是如何使用它:
<td><ms-table-select-cell name="myObj.link" is-editing="myObj.isEditing" options="myObj.linkedList" /></td>
这是错误发生的方式。如果我直接使用带有ngOptions的select标签,那就不是问题了。
答案 0 :(得分:0)
我认为问题是你的'get'属性在每个循环中被调用 您可以尝试分配变量值一次,然后循环它。
<select data-ng-model="name" data-ng-options="g for g in myArray = myObj.linkedList"></select>
答案 1 :(得分:0)