我收到错误消息说我达到了10美元的摘要迭代次数。像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和类,但为了清晰起见,我将它们遗漏了。
所以,这样做是迭代一个名为triggers的集合。有不同类型的触发器,这些触发器的属性由名为`getTriggerProps的作用域上的函数返回。
对于返回属性的列表,我根据属性类型创建一系列输入。属性的模型,将是触发器对象的实际属性。但这就是我认为我遇到的问题,我在迭代这个触发器所在的集合时改变了触发器的属性。
我正在使用angularjs 1.1.5,我知道它是一个不稳定的版本,但我想玩它的功能。
如果看到我正在处理的整个页面可以提供帮助,这里有一个公共链接: https://dl.dropboxusercontent.com/u/12041395/neurobot_interface_proposal.html
答案 0 :(得分:1)
因此,更改迭代的对象不是问题。 ng-repeat的工作方式是,它使用hashKey
标记对象,就像一个唯一的ID,因此它知道它们是同一个实例。只是添加属性不会破坏它。
我认为您的问题可能是您正在迭代新创建的对象?不确定getTriggerProps
是做什么的,但如果每次调用都会创建新对象,那肯定会破坏。如果是这种情况,解决方案是为每个属性添加自己的hashKey
属性,如果对象在概念上相同,则每次都是相同的。
name
属性可能是用作哈希键的不错选择。