【问题标题】:ng-repeater executing every digest cycleng-repeater 执行每个摘要循环
【发布时间】:2015-12-23 05:41:08
【问题描述】:

我试图了解 angular 1 摘要循环的工作原理以及它们如何影响现有范围。我有 2 个控制器,其中一个使用带中继器的角形材料。第二个控制器是一个简单的按钮点击事件。这两个事件都打印到控制台以查看发生了什么。

我看到的是,每次我单击第二个控制器上的按钮时,中继器都会重新运行其整个计算?

这是 Angular 的工作方式吗?请参阅随附的以下代码笔 - 单击按钮时,中继器每次都会在第一个控制器上重新运行。我假设每次在任何控制器上发生任何操作时都会发生这种情况——这看起来很疯狂。

中继器代码如下:

<div flex="50" ng-repeat="item in items">
          <md-checkbox ng-checked="exists(item, selected)" ng-click="toggle(item, selected)">
            {{ item }} <span ng-if="exists(item, selected)">selected</span>
          </md-checkbox>
        </div>

起初我认为我的角度有问题,但似乎这种情况发生在下面完整的代码笔的任何地方。

Codepen Example

【问题讨论】:

  • 这就是它应该如何工作的。脏检查循环对整个应用程序运行多次,直到范围的状态稳定。这是触发事件的低效方式。但这也是设计使然 - 它允许您使用 POJO

标签: angularjs


【解决方案1】:

如果您不希望 ng-repeat 在更改时重新运行,请在 ng-repeat 中使用“track by $index”

【讨论】:

    【解决方案2】:

    是的,这正是它应该如何工作的。这就是双向绑定的本质,您不断检查两个值中的一个是否发生了变化。 如果您想关闭该功能并使用一次性绑定,您可以使用 :: 语法。

    请参阅文档:https://docs.angularjs.org/guide/expression(您需要向下滚动到一次性绑定。遗憾的是没有锚点:D)

    【讨论】:

      猜你喜欢
      • 2015-06-11
      • 2015-08-22
      • 2016-10-31
      • 1970-01-01
      • 2021-04-13
      • 1970-01-01
      • 2014-04-19
      • 1970-01-01
      • 2018-04-26
      相关资源
      最近更新 更多