Angular中使用$watch监听object属性值的变化(详解)


Posted in Javascript onApril 24, 2017

Angular中的$watch可以监听属性值的变化,然后并做出相应处理。

常见用法:

$scope.$watch("person", function(n, o){
  //todo something...
})

 

但是对于一个对象中的某个属性值变化时,$watch似乎不管用了。

示例代码:

<body>
  <div ng-controller="mainCtrl">
    <input id="myText" type="text" ng-model="person.name"/>
    <h2>{{person}}</h2>
    <h2>Status: {{status}}</h2>
  </div>
  <script>
  angular.module('myApp', [])
    .controller('mainCtrl', function ($scope) {
      $scope.person = {
        name:"allen",
        age:21
      }

      $scope.$watch("person", function(n, o){
        //取消第一次加载时的监听响应
        if(n == o){
          return;
        }
        $scope.status = "changed"
      })
  })
</script>
</body>

 

我们为输入框绑定了person对象的name属性,然而当我们改变输入框的值时候,{{person}}确实改变了,然而并没有出现我们想要的change字符。

效果:

Angular中使用$watch监听object属性值的变化(详解)

 我们需要为$watch方法额外添加一个true参数,使之达到我们想要的效果:

$scope.$watch("person", function(n, o){
  if(n == o){
    return;
  }
  $scope.status = "changed";
},true)

$watch方法完整的使用方式是这样的:

$watch(watchExpression, [listener], [objectEquality]);

第一个是监听的参数名称,剩下两个可选参数分别为处理函数和是相等比较的方式,对于后者文档如是说:Compare for object equality using angular.equals instead of comparing for reference equality. 即是否使用angular.equals方法进行比较。

如此效果变为:

Angular中使用$watch监听object属性值的变化(详解)

以上这篇Angular中使用$watch监听object属性值的变化(详解)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
js中apply方法的使用详细解析
Nov 04 Javascript
jQuery实现彩带延伸效果的网页加载条loading动画
Oct 29 Javascript
理解javascript中的MVC模式
Jan 28 Javascript
jQuery基于json与cookie实现购物车的方法
Apr 15 Javascript
完美的js div拖拽实例代码
Sep 24 Javascript
原生js实现电商侧边导航效果
Jan 19 Javascript
React中jquery引用的实现方法
Sep 12 jQuery
详解Node全局变量global模块
Sep 28 Javascript
浅谈vue-cli 3.0.x 初体验
Apr 11 Javascript
JavaScript中while循环的基础使用教程
Aug 11 Javascript
解决vue axios跨域 Request Method: OPTIONS问题(预检请求)
Aug 14 Javascript
利用PHP实现递归删除链表元素的方法示例
Oct 23 Javascript
关于angular js_$watch监控属性和对象详解
Apr 24 #Javascript
Javascript操作dom对象之select全面解析
Apr 24 #Javascript
Node+Express+MongoDB实现登录注册功能实例
Apr 23 #Javascript
使用jQuery ajaxupload插件实现无刷新上传文件
Apr 23 #jQuery
基于JavaScript实现类名的添加与移除
Apr 23 #Javascript
源码分析Vue.js的监听实现教程
Apr 23 #Javascript
Bootstrap进度条与AJAX后端数据传递结合使用实例详解
Apr 23 #Javascript
You might like
PHP弹出提示框并跳转到新页面即重定向到新页面
2014/01/24 PHP
PHP的cookie与session原理及用法详解
2019/09/27 PHP
javascript+css 网页每次加载不同样式的实现方法
2009/12/27 Javascript
利用onresize使得div可以随着屏幕大小而自适应的代码
2010/01/15 Javascript
javascript一元操作符(递增、递减)使用示例
2013/08/07 Javascript
jquery $.each 和for怎么跳出循环终止本次循环
2013/09/27 Javascript
JavaScript中的prototype和constructor简明总结
2014/04/05 Javascript
jQuery处理图片加载失败的常用方法
2015/06/08 Javascript
js实现简单的联动菜单效果
2015/08/19 Javascript
JavaScript和HTML DOM的区别与联系及Javascript和DOM的关系
2015/11/15 Javascript
详解webpack 配合babel 将es6转成es5 超简单实例
2017/05/02 Javascript
vue-router 路由基础的详解
2017/10/17 Javascript
Vue2仿淘宝实现省市区三级联动
2020/04/15 Javascript
jQuery实现鼠标响应式淘宝动画效果示例
2018/02/13 jQuery
Vue2 添加数据可视化支持的方法步骤
2019/01/02 Javascript
在vue中动态添加class类进行显示隐藏实例
2019/11/09 Javascript
浅谈Vue3 Composition API如何替换Vue Mixins
2020/04/29 Javascript
vue:el-input输入时限制输入的类型操作
2020/08/05 Javascript
利用js实现简易红绿灯
2020/10/15 Javascript
[01:07:34]DOTA2-DPC中国联赛定级赛 RNG vs Aster BO3第二场 1月9日
2021/03/11 DOTA
[15:20]DOTA2-DPC中国联赛 正赛 Elephant vs Aster 选手采访
2021/03/11 DOTA
python通过ssh-powershell监控windows的方法
2015/06/02 Python
Python统计日志中每个IP出现次数的方法
2015/07/06 Python
如何使用七牛Python SDK写一个同步脚本及使用教程
2015/08/23 Python
python创建文件时去掉非法字符的方法
2018/10/31 Python
python中bs4.BeautifulSoup的基本用法
2019/07/27 Python
Python爬虫库requests获取响应内容、响应状态码、响应头
2020/01/25 Python
Python接口测试结果集实现封装比较
2020/05/01 Python
CSS3 3D位移translate效果实例介绍
2016/05/03 HTML / CSS
香港通票:Hong Kong Pass
2019/02/26 全球购物
党员领导干部承诺书
2014/05/28 职场文书
我为党旗添光彩演讲稿
2014/09/10 职场文书
个人四风对照检查材料
2014/09/26 职场文书
2015年度个人教学工作总结
2015/05/20 职场文书
Python 解决空列表.append() 输出为None的问题
2021/05/23 Python
基于Redission的分布式锁实战
2022/08/14 Redis