我收到一条错误消息,指出我已达到 10 $digest 迭代。其他问题如 this one ,告诉我这是因为我在迭代变量时更改了它。问题是我正在制作一个非常有用的界面。我的代码目前看起来像这样。
<div ng-repeat="(index, trigger) in triggers" ng-click="select(index)">
<strong ng-bind="trigger.name></strong>
<div ng-show="selected == index" class="span12">
<h5>edit properties</h5>
<div ng-repeat="property in getTriggerProps(trigger.type) ">
<div ng-bind="property.name"></div>
<div ng-switch on="property.name">
<input type="text" ng-switch-when="'text'" ng-model="trigger[property.name]">
<select type="select" ng-switch-when="'select'" ng-model="trigger[property.name]" ng-options="possible for possible in property.options">
</select>
</div>
</div> </div>
</div>
在我的实际代码中,还有更多与 twitter bootstrap 相关的 div 和类,但为了清楚起见,我将它们排除在外。
所以,它的作用是迭代一个名为触发器的集合。触发器有不同类型,这些触发器的属性由作用域上名为“getTriggerProps”的函数返回。
对于返回的属性列表,我根据属性类型创建了一系列输入。属性的模型将是触发器对象上的实际属性。但这就是我认为遇到的问题,我在迭代此触发器所在的集合时更改触发器的属性。
我使用的是 angularjs 1.1.5,我知道这是一个不稳定的版本,但我想尝试一下它的功能。
如果查看我正在处理的整个页面可能有帮助,这里有一个公共(public)链接: https://dl.dropboxusercontent.com/u/12041395/neurobot_interface_proposal.html
最佳答案
因此,更改迭代的对象不是问题。 ng-repeat 的工作方式是,它使用类似于唯一 ID 的 hashKey
来标记对象,因此它知道它们是同一个实例。仅添加属性不会破坏这一点。
我认为您的问题可能是您正在迭代新创建的对象?不确定 getTriggerProps 的作用,但如果它每次调用都会创建新对象,那肯定会中断。如果是这种情况,解决方案是为每个对象添加您自己的 hashKey
属性,如果对象在概念上相同,则每次都相同。
name
属性可能是用作哈希键的不错选择。
关于javascript - 在 angularjs 中迭代变量时编辑变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17358059/