每当我更改用于 ng-repeat 的数组中的值时,Ng 样式指令的函数都会为我的数组中的所有项目触发。查看示例并注意“getStyle(text)”函数的控制台日志。
http://jsbin.com/panotuyepe/1/edit?html,js,控制台,输出
有什么方法可以防止 angular 对数组中的所有其他值进行脏检查,因为它们没有改变?更改仅针对数组列表中的一项。不需要检查其他 ng 重复项。
每当我更改用于 ng-repeat 的数组中的值时,Ng 样式指令的函数都会为我的数组中的所有项目触发。查看示例并注意“getStyle(text)”函数的控制台日志。
http://jsbin.com/panotuyepe/1/edit?html,js,控制台,输出
有什么方法可以防止 angular 对数组中的所有其他值进行脏检查,因为它们没有改变?更改仅针对数组列表中的一项。不需要检查其他 ng 重复项。
这是因为你的输入有ng-model="item.text"
. 将其更改为value="{{item.text}}"
查看修改后的JSBin
在考虑了几个小时之后,这就是我想出的。我创建了一个绑定到“输入更改”事件的自定义指令。一旦输入发生变化,范围就会通过事件的回调函数进行更新。然后,我通过遍历作用域链到 $parent 作用域并触发 $digest,仅在具有更改的行的作用域上触发 $digest。
这是一个巨大的性能改进!如果列表很长,您会看到很大的不同。现在,每个“输入更改”事件仅在更改的行上触发 2 次对我的 ng 样式函数的调用...
http://jsbin.com/daqoxajazu/1/watch?html,js,控制台,输出
如果其他人有更好的解决方案,请告诉我。