我的编程空间,编程开发者的网络收藏夹
学习永远不晚

angularJS的$watch失效怎么办

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

angularJS的$watch失效怎么办

小编给大家分享一下angularJS的$watch失效怎么办,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!

$watch方法,它可以帮助我们在每个scope中监视其中的变量。

$watch 单一的变量

对于普通的变量时,如数字,字符串等,直接如下写是可以监视到变量的变化,并执行相应的函数的。

$scope.count=1;
$scope.$watch('count',function(){
...
});

$watch 多个变量

对于多个变量的监视变化,执行同一函数的话,可以将这几个变量转为字符串,以‘+'号隔开来进行监视

//当count或page变化时,都会执行这个匿名函数
$scope.count=1;
$scope.page=1;
$scope.$watch('count + page',function(){
...
});

$watch对象或数组

发现用上面两种方法去监视数组时,会发现即使数组的内容改变了,也没有触发到这个匿名函数。之后发现watch函数其实是有三个变量的,第一个参数是需要监视的对象,第二个参数是在监视对象发生变化时需要调用的函数,实际上watch还有第三个参数,它在默认情况下是false。

当第三个参数是false时,其实watch函数监视的是数组的地址,而数组的内容的变化不会影响数组地址的变化,所以watch函数失灵了。

解决办法,就是在后面添加第三个参数为true就好(当然,也可以将这监听返回结果为JSON字符串形式的该对象或数组的的匿名函数。)

$scope.items=[
{a:1},
{a:2}
{a:3}];
$scope.$watch('items',function(){...},true);

或者将监听返回结果为JSON字符串形式的该对象或数组的的匿名函数

$scope.items=[
{a:1},
{a:2}
{a:3}];
$scope.$watch(function(){
  return JSON.stringify($scope.items);
},function(){...});

$watch 函数的返回结果

在写代码的时候,有时会遇到要监视一个函数返回的结果是否变化的情况,所以查了一下$watch 监视函数的情况。

方法1:监视对象为“函数名()”的字符串,记得加“()”!

//未完成的任务个数
$scope.unDoneCount = function() {
  var count = 0;
  angular.forEach($scope.todoList, function(todo) {
    count += todo.done ? 0 : 1;
  });
  return count;
};
//单选影响全选部分
$scope.$watch('unDoneCount()', function(nv) {
  $scope.isDoneAll = nv ? false : true;
});

方法2:在监视对象中设置为匿名函数,返回要监视的函数的返回值(绕晕了…)

$scope.$watch(function(){
  return $scope.unDoneCount();//不要忘了(),要执行的啊~
}, function(nv) {
  $scope.isDoneAll = nv ? false : true;
});

取消$watch

watch的性能消耗好像蛮大的,所以对于已经不需要监视的watch,记得定时取消掉。

至于怎么取消了…查了好久才找到的

其实每个watch函数返回的结果就是这个watch的deregisterWatch()函数

//在chrome的控制台上,断点得到的$watch的返回值
function deregisterWatch() {
  arrayRemove(array, watcher);
  lastDirtyWatch = null;
}

所以啊,要取消watch的话,一开始将$watch的返回值保存就好啦,要取消watch的时候,在调用。

var count=1;
var unbingWatch=$scope.$watch('todoList',function(){
  console.log('todoList change');
  count++;
  //相当于在todoList变化了4次之后,就调用unbingWatch()取消这个watch
  //在第5次todoList改变的时候,就不会输出todoList change了。
  if(count>4){
    unbingWatch();
  }
});

以上是“angularJS的$watch失效怎么办”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注编程网行业资讯频道!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

angularJS的$watch失效怎么办

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

cookie失效怎么办

如果你的cookie失效了,可以尝试以下方法:1. 清除浏览器缓存:打开浏览器设置,找到“清除缓存”或“清除浏览数据”的选项,勾选“Cookies和站点数据”选项,然后点击清除按钮。2. 重新登录:如果你使用的是需要登录的网站,尝试退出当前
2023-08-11

php setcookie 失效怎么办

php setcookie失效的解决办法:1、浏览器开启cookie;2、删除在setcookie()之前的任何HTTP头部输出;3、使用php的setcookie()来创建cookie即可。
2021-04-21

react里的require失效怎么办

react里的require失效是因为require返回一个ES模块而不是字符串,其解决办法就是通过“require('../path/to/image.jpg').default;”方式引入即可。
2023-05-14

jquery 表单失效怎么办

jquery表单失效的解决办法:1、查看“form”表单内部是否有“submit”属性的“button”;2、修改相应代码为“type='button'”,然后用“onclick”事件触发表单提交即可。
2023-05-14

php下access_token失效怎么办

php下access_token失效的解决方法:1、使用swoole写一个定时器,保证每小时刷新一下access_token;2、写入数据库即可。
2021-10-29

sql索引失效怎么办

sql 索引失效的处理方法包括:确定失效原因:索引不对齐、选择性过低、更新频率过高、维护不当、索引块溢出。解决方法:重新创建或重建索引优化查询语句提高索引选择性减少索引更新频率定期维护索引优化索引块大小SQL 索引失效的处理方法SQL 索
sql索引失效怎么办
2024-05-30

redis缓存失效怎么办

redis 缓存失效解决方案什么是 Redis 缓存失效?Redis 缓存失效是指缓存中存储的数据不再有效或过期。这会导致应用程序访问陈旧的数据,影响数据的一致性和可靠性。Redis 缓存失效的类型Redis 缓存失效分为两种主要类
redis缓存失效怎么办
2024-05-21

javascript选择器失效怎么办

javascript选择器失效是因为代码不规范导致的,其解决办法:1、把引入的JS代码去掉,ID选择器方法即可有效;2、在引入“jquery.js”之前引入指定JS代码即可。
2023-05-14

mybatis中的test语句失效怎么办

这篇文章主要介绍了mybatis中的test语句失效怎么办,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。mybatis test语句失效正常情况下,写动态sql的if tes
2023-06-29

SpringBoot自动配置失效怎么办

小编给大家分享一下SpringBoot自动配置失效怎么办,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!问题描述下面是一个简单复现的代码片段,在你没有阅读完本文时,如果能做出正确的判断,那恭喜你可以节省阅读本文的时间了。1、
2023-06-25

编程热搜

目录