1

我收到一条错误消息,说我达到了 10 个 $digest 迭代。像这样的其他问题,告诉我那是因为我在迭代变量时正在更改它。问题是我正在制作一个真正有用的界面。我的代码目前看起来像这样。

<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

4

1 回答 1

1

因此,更改您迭代的对象不是问题。hashKeyng-repeat 的工作方式是,它用一个类似于唯一 ID的对象标记对象,因此它知道它们是同一个实例。只是添加属性不会破坏这一点。

我认为您的问题可能是您正在迭代新创建的对象?不确定是什么getTriggerProps,但如果它每次调用都会创建新对象,那肯定会中断。如果是这种情况,解决方案是为每个对象添加自己的hashKey属性,如果对象在概念上相同,则每次都将相同。

name属性可能是用作哈希键的不错选择。

于 2013-06-28T06:09:53.477 回答