【问题标题】:How does AngularJS manage scope in ng-repeats?AngularJS 如何管理 ng-repeats 中的范围?
【发布时间】:2015-01-06 01:09:01
【问题描述】:

前几天我在程序员stackexchange上问了这个问题,没有收到任何回复,所以我想我会在这里尝试。

我有一个大约有 60 行和 20 列的表格。每个单元格都有一个具有隔离范围的指令。我使用 2 个嵌套的 ng-repeats 生成表(一个用于行,一个用于列),但我想知道当摘要循环导致重新生成 ng-repeats 中的指令时,角度如何处理范围?

它会破坏我的指令中所有以前的孤立作用域并创建新的作用域,还是那些旧的孤立作用域现在在某个地方成为孤立的,并且随着越来越多的摘要发生内存泄漏?

作为开发人员,我是否应该意识到这一点并确保处理任何孤立作用域的破坏?

【问题讨论】:

  • 每次ng-repeat 迭代都会创建一个新范围。每个迭代的作用域都是另一个的兄弟,指令的独立作用域只存在于指令中。

标签: angularjs angularjs-scope angularjs-ng-repeat


【解决方案1】:

ng-repeat 在您的$scope 中为您正在显示的所有值创建一个$$hashKey 属性。每当调用 $digest 时,它都会检查值是否更改。 ng-repeat 通常是慢角度应用的罪魁祸首之一,原因有很多。

  1. 您可能不需要观察变量。如果您只想显示一些不经常更新的数据,您不妨删除双重绑定,这样 Angular 就不必在 $scope 中为它们创建条目
  2. 从不将函数结果用作 ng-repeat 值,因为该函数将在每个 $digest 循环中运行
  3. 不要使用过滤器,因为它们会在$digest 循环中被调用两次并减慢ng-repeat

Here 提供更多关于 ng-repeat 和角度性能的信息。

【讨论】:

    猜你喜欢
    • 2017-07-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-01
    • 1970-01-01
    • 2012-06-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多