广告
返回顶部
首页 > 资讯 > 前端开发 > VUE >angularJS的$watch失效怎么办
  • 112
分享到

angularJS的$watch失效怎么办

2024-04-02 19:04:59 112人浏览 独家记忆
摘要

小编给大家分享一下angularjs的$watch失效怎么办,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!$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失效怎么办”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注编程网VUE频道!

--结束END--

本文标题: angularJS的$watch失效怎么办

本文链接: https://www.lsjlt.com/news/72896.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

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

下载Word文档
猜你喜欢
  • angularJS的$watch失效怎么办
    小编给大家分享一下angularJS的$watch失效怎么办,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!$watch方法,它可...
    99+
    2022-10-19
  • cookie失效怎么办
    如果你的cookie失效了,可以尝试以下方法:1. 清除浏览器缓存:打开浏览器设置,找到“清除缓存”或“清除浏览数据”的选项,勾选“Cookies和站点数据”选项,然后点击清除按钮。2. 重新登录:如果你使用的是需要登录的网站,尝试退出...
    99+
    2023-08-11
    cookie
  • php setcookie 失效怎么办
    本文操作环境:Windows7系统、PHP7.1版,DELL G3电脑php setcookie函数失效?最近在为一个网站写php后台的时候发现setcookie这个函数总是不能正常的设置cookie,通过var_dump()发现函数返回值...
    99+
    2021-04-21
    php setcookie
  • setcookie php 失效怎么办
    本教程操作环境:windows7系统、PHP8.1版、Dell G3电脑。setcookie php 失效怎么办?具体问题描述:PHP setcookie指定domain参数后,在IE下设置cookie失效了?解决方法下面的代码:在chro...
    99+
    2022-10-26
  • react里的require失效怎么办
    本教程操作环境:Windows10系统、react18.0.0版、Dell G3电脑。react里的require失效怎么办?react项目中require引入图片无效的原因及解决方案原因如果使用create-react-app和requi...
    99+
    2023-05-14
    require() React
  • php下access_token失效怎么办
    本文操作环境:windows10系统、php 7、thinkpad t480电脑。可能你也和我一样遇到过这样的问题:PHP明明设置了缓存,而且也没有过期,但是却提示失效。遇到这种问题一般是因为两种情况:多个appid和secrete 生成的...
    99+
    2021-10-29
    php access_token
  • JS出现失效怎么办
    这篇文章主要介绍JS出现失效怎么办,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!对于大前端来说,JS可谓是我们的神器,从页面的效果到数据的传递,再到后台的业务,无处不充斥着JS的身影...
    99+
    2022-10-19
  • layui弹框失效怎么办
    小编给大家分享一下layui弹框失效怎么办,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!之前一直用layer弹框组件一直出现这个...
    99+
    2022-10-19
  • layer.open后laydate失效怎么办
    这篇文章主要为大家展示了“layer.open后laydate失效怎么办”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“layer.open后laydate失效怎...
    99+
    2022-10-19
  • jquery 表单失效怎么办
    本教程操作环境:Windows10系统、jquery3.2.1版、DELL G3电脑jquery 表单失效怎么办?jQuery控制form表单提交无效 $(form).submit() 无效查看form表单内部 是否有submit属性的bu...
    99+
    2023-05-14
    表单 jQuery
  • angularJS动态生成的页面中ng-click无效怎么办
    这篇文章将为大家详细讲解有关angularJS动态生成的页面中ng-click无效怎么办,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。1.首先将我们要赋值给页面的数据ne...
    99+
    2022-10-19
  • margin-top在Firefox失效怎么办
    这篇文章主要介绍margin-top在Firefox失效怎么办,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!margin-top在Firefox失效的解决方法"collap...
    99+
    2022-10-19
  • css中line-height失效怎么办
    小编给大家分享一下css中line-height失效怎么办,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧! 一、行高失效标题问题启事: 检查你CSS中设置字体font-family技俩属...
    99+
    2022-10-19
  • javascript选择器失效怎么办
    本教程操作环境:Windows10系统、javascript1.8.5版本、Dell G3电脑。javascript选择器失效怎么办?jQuery的ID选择器失效问题jQuery的ID选择器,在同一项目别的文件中一切正常;在当前页面,jQu...
    99+
    2023-05-14
    javascript 选择器
  • mybatis中的test语句失效怎么办
    这篇文章主要介绍了mybatis中的test语句失效怎么办,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。mybatis test语句失效正常情况下,写动态sql的if tes...
    99+
    2023-06-29
  • css媒体查询失效怎么办
    本教程操作环境:Windows10系统、css3版、DELL G3电脑css媒体查询失效怎么办? CSS @media媒体查询无效用@media媒体查询写的CSS样式无效?1.问题用@media媒体查询写的CSS样式对html无效。2.解决...
    99+
    2023-05-14
    媒体查询 css
  • win8蓝牙功能失效怎么办
    小编给大家分享一下win8蓝牙功能失效怎么办,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!首先我们先连接上蓝牙设备,比如蓝牙鼠标,连接成功后,右键点击桌面上的“这...
    99+
    2023-06-28
  • js放到head中失效怎么办
    小编给大家分享一下js放到head中失效怎么办,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!1.今天写js碰到一个奇怪的问题,写...
    99+
    2022-10-19
  • php证书授权失效怎么办
    本教程操作环境:windows7系统、PHP8.1版、Dell G3电脑。php证书授权失效怎么办?解决PHP环境(宝塔面板)提示SSL certificate problem: certificate has expired最近在帮客户排...
    99+
    2022-11-07
  • laravel登录时间失效怎么办
    laravel登录时间失效解决方法:1、Cookie会话配置,可以在“.env”文件中设置“SESSION_LIFETIME”变量;2、延长会话生命周期,通过在用户每次请求时刷新会话的到期时间,或者通过自定义中间件来延长会话的生命周期实现;...
    99+
    2023-07-10
软考高级职称资格查询
推荐阅读
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作