fxc*_*xck 8 javascript angularjs angularjs-scope angularjs-ng-repeat
我仍然遇到同样的问题,ng-repeat中的过滤器和函数被称为所有该死的时间.
这里的示例,http://plnkr.co/edit/G8INkfGZxMgTvPAftJ91?p = preview,无论何时在单行上更改内容,someFilter过滤器都会被调用1000次.
显然这是因为子范围的任何更改都会冒泡到其父级,导致$ digest运行,导致所有过滤器运行(/sf/answers/1115545371/).是对的吗?如何在我的特定情况下防止它发生?
如何才能使其仅在已更改的项目上运行?
在我的实际用例中,即使在ng-repeat的项目上没有更改,也会调用过滤器,它是如此毫无意义,实际上会导致性能问题.
//编辑清除了来自探测器的所有不必要的东西 http://plnkr.co/edit/G8INkfGZxMgTvPAftJ91?p=preview
这就是 Angular 的脏检查的工作原理。如果您有一个包含 500 个项目的数组并且该数组发生更改,则必须将过滤器重新应用于整个数组。现在您想知道“为什么两次”?
来自另一个答案:
这是正常的,AngularJS 使用“脏检查”方法,因此需要调用所有过滤器来查看是否存在任何更改。之后,它检测到一个变量(您键入的变量)发生更改,然后再次执行所有过滤器以检测是否有其他更改。
以及它引用的答案:How does data binding work in AngularJS?
编辑:如果您确实注意到速度缓慢(我在较旧的 Core 2 Duo PC 上没有遇到这种情况),那么根据您的 UI,您可能有多种创造性的方法可以解决它。
onblur,而不能onkeypress使用指令,如下所示: http: //jsfiddle.net/langdonx/djtQR/1/| 归档时间: |
|
| 查看次数: |
4945 次 |
| 最近记录: |