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 option删除代码集合
Nov 12 Javascript
javascript 时间比较实现代码
Oct 28 Javascript
ExtJs 3.1 XmlTreeLoader Example Error
Feb 09 Javascript
javascript学习笔记之10个原生技巧
May 21 Javascript
javascript记住用户名和登录密码(两种方式)
Aug 04 Javascript
jQuery中用on绑定事件时需注意的事项
Mar 19 Javascript
AngularJS 异步解决实现方法
Jun 12 Javascript
Node.js 的模块知识汇总
Aug 16 Javascript
简单了解JavaScript中的执行上下文和堆栈
Jun 24 Javascript
vue项目在线上服务器访问失败原因分析
Aug 14 Javascript
在vue中axios设置timeout超时的操作
Sep 04 Javascript
vue 使用vant插件做tabs切换和无限加载功能的实现
Nov 04 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
如何过滤高亮显示非法字符
2006/10/09 PHP
配置Apache2.2+PHP5+CakePHP1.2+MySQL5运行环境
2009/04/25 PHP
php实现首页链接查询 友情链接检查的代码
2010/01/05 PHP
php str_replace替换指定次数的方法详解
2017/05/05 PHP
PHP ADODB生成HTML表格函数rs2html功能【附错误处理函数用法】
2018/05/29 PHP
jQuery+CSS实现菜单滑动伸展收缩(仿淘宝)
2013/03/22 Javascript
关于jQuery参考实例2.0 用jQuery选择元素
2013/04/07 Javascript
使用jquery实现以post打开新窗口
2014/03/19 Javascript
jQuery Ajax 加载数据时异步显示加载动画
2016/08/01 Javascript
AngularJS表单验证中级篇(3)
2016/09/28 Javascript
JavaScript原生编写《飞机大战坦克》游戏完整实例
2017/01/04 Javascript
详解vue父子模版嵌套案例
2017/03/04 Javascript
完美解决手机浏览器顶部下拉出现网页源或刷新的问题
2017/11/30 Javascript
vue插件开发之使用pdf.js实现手机端在线预览pdf文档的方法
2018/07/12 Javascript
jQuery实现监听下拉框选中内容发生改变操作示例
2018/07/13 jQuery
mpvue性能优化实战技巧(小结)
2019/04/17 Javascript
如何让Nodejs支持H5 History模式(connect-history-api-fallback源码分析)
2019/05/30 NodeJs
Vue快速实现通用表单验证的方法
2020/02/24 Javascript
vue路由结构可设一层方便动态添加路由操作
2020/08/31 Javascript
Python装饰器知识点补充
2018/05/28 Python
python hashlib加密实现代码
2019/10/17 Python
python文件操作的简单方法总结
2019/11/07 Python
Django实现whoosh搜索引擎使用jieba分词
2020/04/08 Python
Python使用itcaht库实现微信自动收发消息功能
2020/07/13 Python
Python3.7安装PyQt5 运行配置Pycharm的详细教程
2020/10/15 Python
IE10 Error.stack 让脚本调试更加方便快捷
2013/04/22 HTML / CSS
澳大利亚家用电器在线商店:Billy Guyatts
2020/05/05 全球购物
瑞典最大的儿童用品网上商店:pinkorblue.se
2021/03/09 全球购物
error和exception有什么区别
2012/10/02 面试题
函授本科自我鉴定
2013/11/03 职场文书
初中校园之声广播稿
2014/01/15 职场文书
党建示范点实施方案
2014/03/12 职场文书
环保志愿者活动方案
2014/08/14 职场文书
2015年精神文明建设工作总结
2015/04/21 职场文书
2016年中秋节慰问信
2015/12/01 职场文书
MySQL8.0升级的踩坑历险记
2021/11/01 MySQL