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 获取radio按钮值的实例
Aug 17 Javascript
JavaScript中用于四舍五入的Math.round()方法讲解
Jun 15 Javascript
引用jquery框架后出错的解决方法
Aug 09 Javascript
让编辑器支持word复制黏贴、截屏的js代码
Oct 17 Javascript
JS中位置与大小的获取方法
Nov 22 Javascript
微信小程序 wx.uploadFile无法上传解决办法
Dec 14 Javascript
JS中正则表达式全局匹配模式 /g用法详解
Apr 01 Javascript
基于 webpack2 实现的多入口项目脚手架详解
Jun 26 Javascript
JS实现同一DOM元素上onClick事件与onDblClick事件并存的解决方法
Jun 07 Javascript
js删除对象/数组中null、undefined、空对象及空数组方法示例
Nov 14 Javascript
详解ES6系列之私有变量的实现
Nov 21 Javascript
angular多语言配置详解
May 16 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
农民和部队如何穿矿
2020/03/04 星际争霸
php注入实例
2006/10/09 PHP
PHP4实际应用经验篇(3)
2006/10/09 PHP
PHP新手上路(二)
2006/10/09 PHP
php数组转换js数组操作及json_encode的用法详解
2013/10/26 PHP
PHP调用接口API封装的例子
2019/10/11 PHP
javascript 硬盘序列号+其它硬件信息
2008/12/23 Javascript
javascript中的array数组使用技巧
2010/01/31 Javascript
jQuery的实现原理的模拟代码 -3 事件处理
2010/08/03 Javascript
JavaScript在IE和FF下的兼容性问题
2014/05/19 Javascript
javascript制作坦克大战全纪录(1)
2014/11/27 Javascript
使用JavaScript+canvas实现图片裁剪
2015/01/30 Javascript
AngularJS中过滤器的使用与自定义实例代码
2016/09/17 Javascript
基于jQuery实现Tabs选项卡自定义插件
2016/11/21 Javascript
Vue.js基础知识小结
2017/01/13 Javascript
jQuery实现简单的滑动导航代码(移动端)
2017/05/22 jQuery
使用vue和datatables进行表格的服务器端分页实例代码
2017/06/07 Javascript
JS获取字符对应的ASCII码实例
2017/09/10 Javascript
对layui中table组件工具栏的使用详解
2019/09/19 Javascript
[03:44]2015国际邀请赛选手档案—Cloud9.NoTail
2015/07/28 DOTA
Python闭包实现计数器的方法
2015/05/05 Python
Android分包MultiDex策略详解
2017/10/30 Python
在python中只选取列表中某一纵列的方法
2018/11/28 Python
python 叠加等边三角形的绘制的实现
2019/08/14 Python
pycharm工具连接mysql数据库失败问题
2020/04/01 Python
Python如何把十进制数转换成ip地址
2020/05/25 Python
CSS3弹性伸缩布局之box布局
2016/07/12 HTML / CSS
CSS3动画之利用requestAnimationFrame触发重新播放功能
2019/09/11 HTML / CSS
巴基斯坦购物网站:Goto
2019/03/11 全球购物
工作鉴定评语
2014/05/04 职场文书
应届毕业生求职信范文
2014/05/08 职场文书
触电现场处置方案
2014/05/14 职场文书
一般党员对照检查材料
2014/09/24 职场文书
订货会邀请函
2015/01/31 职场文书
2016年乡镇综治宣传月活动总结
2016/03/16 职场文书
深入理解mysql事务隔离级别和存储引擎
2022/04/12 MySQL