发布网友 发布时间:2022-04-20 07:52
共2个回答
懂视网 时间:2022-04-20 12:14
本篇文章主要介绍了浅谈angularJS的$watch失效问题的解决方案,具有一定的参考价值,感兴趣的小伙伴们可以参考一下。本文介绍了浅谈angularJS的$watch失效问题的解决方案,分享给大家,顺便给自己留个笔记
$watch方法,它可以帮助我们在每个scope中监视其中的变量。
$watch 单一的变量
对于普通的变量时,如数字,字符串等,直接如下写是可以监视到变量的变化,并执行相应的函数的。
$watch 多个变量
对于多个变量的监视变化,执行同一函数的话,可以将这几个变量转为字符串,以‘+'号隔开来进行监视
$watch对象或数组
发现用上面两种方法去监视数组时,会发现即使数组的内容改变了,也没有触发到这个匿名函数。之后发现watch函数其实是有三个变量的,第一个参数是需要监视的对象,第二个参数是在监视对象发生变化时需要调用的函数,实际上watch还有第三个参数,它在默认情况下是false。
当第三个参数是false时,其实watch函数监视的是数组的地址,而数组的内容的变化不会影响数组地址的变化,所以watch函数失灵了。
解决办法,就是在后面添加第三个参数为true就好(当然,也可以将这监听返回结果为JSON字符串形式的该对象或数组的的匿名函数。)
或者将监听返回结果为JSON字符串形式的该对象或数组的的匿名函数
$watch 函数的返回结果
在写代码的时候,有时会遇到要监视一个函数返回的结果是否变化的情况,所以查了一下$watch 监视函数的情况。
方法1:监视对象为“函数名()”的字符串,记得加“()”!
方法2:在监视对象中设置为匿名函数,返回要监视的函数的返回值(绕晕了…)
取消$watch
watch的性能消耗好像蛮大的,所以对于已经不需要监视的watch,记得定时取消掉。
至于怎么取消了…查了好久才找到的
其实每个watch函数返回的结果就是这个watch的deregisterWatch()函数
所以啊,要取消watch的话,一开始将$watch的返回值保存就好啦,要取消watch的时候,在调用。
热心网友 时间:2022-04-20 09:22
1、插件源码主要基于angular directive来实现。 2、调用时关键地方是后台请求处理函数,也就是从后台取数据。 3、插件有两个关键参数currentPage、itemsPerPage,当前页码和每页的记录数。 4、实现方法调用后我们需要根据每次点击分页插件页码时重新提交后台来获取相应页码数据。 在调用的页码中我使用了$watch来监控。 我初次使用时是把调用函数放在了插件的onchange中,结果发现每次都会触发两次后台。这个地方需要注意。 5、我把请求后台封装成了Service层,然后在Controller里调用,也符合MVC思想。