angularjs
中的过滤器使我们经常使用的,但是对其的理解只在能能够使用的层面上。这次深入学习了一下。
在Controller中使用过滤器
在DOM中使用过滤器的弊端
我们在使用过滤器的时候,更多的是在DOM
中使用管道符(|)
来进行过滤,因为简单嘛。但是在它简单的背后是牺牲了性能,在DOM
中的过滤器会造成额外的内部开销,所以在Controller
中使用过滤器会更快一些。
但是有人就会说了:我并没有感到区别呀。这是你过滤的对象还不够多。
比如我们有时会对ng-repeat
使用过滤器,这时当输入的数组中存在几千条数据的时候,我们就能明显的看出加载页面时会变得缓慢。
区别
那在Controller
中使用过滤器和在DOM
中使用差在哪了呢?
这是因为在ngRepeat
会在每次的$digest循环
的时候都调用一次。由于angular
存在脏检查
机制,所以不管执行任何的操作都会使得重新检查内部的$watch()
,而每次动作都有可能改变数组集合,所以就要每个$digest
的后面执行一下过滤器。
在Controller
中调用过滤器就不同了,我们可以限定在哪些操作后面执行过滤器,这样就减少了不必要的消耗。
建议
另外,过滤器就是给他一个输入,然后它给你个输出,其实原理就是一个函数。但是通过上面的分析,过滤器的执行的特殊性,所以就不要在过滤器中使用过于复杂的逻辑代码,这样就会拖慢应用。
当需要执行复杂的逻辑的时候,还会抽象成一个Service
比较好。
总结
在angularjs
中,过滤器还是比较简单的,但是仔细研究一下还是蛮有意思的。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。