javascript - 在 angularjs 中迭代变量时编辑变量

标签 javascript angularjs

我收到一条错误消息,指出我已达到 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/

相关文章:

javascript - AngularJS - 在文件输入上将图像加载到 img 标签

javascript - 在 angular.js 范围内转义斜杠

javascript - 创建 'divs' 层并在单击相应按钮时显示它们

javascript - 使用 Service Worker 时离线重写 URL

javascript - 如果 JavaScript 有一流的函数,为什么在变量中调用这个函数不起作用?

javascript - Ng-Repeat 在资源查询后不更新 - $apply() 不起作用

javascript - 使用 JavaScript 通过匹配键值和索引值来组合两个 JSON 对象

javascript - 捕获子指令抛出的错误

javascript - 在 JavaScript 中使用 show 或 shown

javascript - 如何在网站上保留用户的事件日志?