【问题标题】:Angular.js filters and functions on scope that is changing every secondAngular.js 过滤器和函数作用域每秒都在变化
【发布时间】:2013-04-10 14:49:31
【问题描述】:

问题。我有一个条目表($scope.entries),每行(ng-repeat)有 5 列,其中 2 列有针对各种转换的定制过滤器。

现在在同一个范围内,我有 active_entry($scope.active_entry),它每秒都在变化,因为它以及 angular 的工作原理(我猜),整个范围都在不断检查,我的过滤器也在执行。

这会导致 Batarang 中的Watch Expressions随着时间的推移而飙升。

如何使用为 active_entry 创建某种隔离范围,这样我的过滤器就不会每秒一遍又一遍地渲染?

制作指令是创建隔离作用域的唯一方法吗?它会起作用吗?如果我稍后在控制器中需要来自隔离范围的值怎么办?

【问题讨论】:

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


    【解决方案1】:

    您在问题中提出了很多问题。最好在单独的 SO 问题中分别询问他们。

    只要Angular digest cycle 运行,所有监视和过滤器都会运行。更改 Angualar “内部”的内容将导致摘要循环运行。你怎么换$scope.active_entry?如果您可以在 Angular 之外更改它,您也许可以做您想做的事。正如您所提到的,您还必须将该属性放入新的子范围(scope: true)或隔离范围(scope: {...}),然后您可以调用$scope.digest()(在您更改active_entry之后)只消化那个范围。

    创建指令将是创建隔离范围的最佳方式。您可以使用 ng-controller 或指令创建子范围。

    另见https://groups.google.com/d/topic/angular/1XtEAX93ces/discussion

    【讨论】:

    • 它有点像一个计时器,所以 active_entry 每秒更新一次 $timeout..
    • 我不明白,我创建了一个隔离作用域plnkr.co/edit/8UqVXWFTdutIQ4sHDPAe?p=preview,并且父作用域上的过滤器仍在每秒执行一次(检查控制台)..
    • 啊,我明白了,$timeout 和 $digest() 处的第三个参数。
    猜你喜欢
    • 2015-04-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多