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 相关文章推荐
初窥JQuery(一)jquery选择符 必备知识点
Nov 25 Javascript
教你用AngularJS框架一行JS代码实现控件验证效果
Jun 23 Javascript
jquery动态导航插件dynamicNav用法实例分析
Sep 06 Javascript
如何用angularjs制作一个完整的表格
Jan 21 Javascript
谈谈PHP中相对路径的问题与绝对路径的使用
Aug 16 Javascript
knockoutjs动态加载外部的file作为component中的template数据源的实现方法
Sep 01 Javascript
clipboard.js在移动端复制失败的解决方法
Jun 13 Javascript
这应该是最详细的响应式系统讲解了
Jul 22 Javascript
Vue.js路由实现选项卡简单实例
Jul 24 Javascript
Vue.js中provide/inject实现响应式数据更新的方法示例
Oct 16 Javascript
JS原型prototype和__proto__用法实例分析
Mar 14 Javascript
Vue实现tab导航栏并支持左右滑动功能
Jun 28 Vue.js
关于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 判断访客是否为搜索引擎蜘蛛的函数代码
2011/07/29 PHP
PHP和MySql中32位和64位的整形范围是多少
2016/02/18 PHP
php 判断IP为有效IP地址的方法
2018/01/28 PHP
js中几种去掉字串左右空格的方法
2006/12/25 Javascript
input 输入框获得/失去焦点时隐藏/显示文字(jquery版)
2013/04/02 Javascript
javascript的动态加载、缓存、更新以及复用(一)
2014/06/09 Javascript
javascript 10进制和62进制的相互转换
2014/07/31 Javascript
JS是按值传递还是按引用传递
2015/01/30 Javascript
javascript实现信息增删改查的方法
2015/07/25 Javascript
在其他地方你学不到的jQuery小贴士和技巧(欢迎收藏)
2016/01/20 Javascript
关于javascript原型的修改与重写(覆盖)差别详解
2016/08/31 Javascript
JavaScript对象创建模式实例汇总
2016/10/03 Javascript
Javascript 正则表达式校验数字的简单实例
2016/11/02 Javascript
解决VUE框架 导致绑定事件的阻止冒泡失效问题
2018/02/24 Javascript
微信小程序中遇到的iOS兼容性问题小结
2018/11/14 Javascript
Electron-vue开发的客户端支付收款工具的实现
2019/05/24 Javascript
解决layui富文本编辑器图片上传无法回显的问题
2019/09/18 Javascript
js实现小球在页面规定的区域运动
2020/06/16 Javascript
js实现带积分弹球小游戏
2020/07/21 Javascript
vue中element 的upload组件发送请求给后端操作
2020/09/07 Javascript
jQuery实现日历效果
2020/09/11 jQuery
react antd表格中渲染一张或多张图片的实例
2020/10/28 Javascript
uniapp电商小程序实现订单30分钟倒计时
2020/11/01 Javascript
[02:28]PWL开团时刻DAY3——Ink Ice与DeMonsTer之间的勾心斗角
2020/11/03 DOTA
Python 元组(Tuple)操作详解
2014/03/11 Python
python fabric使用笔记
2015/05/09 Python
详解Django CAS 解决方案
2019/10/30 Python
opencv3/C++实现视频读取、视频写入
2019/12/11 Python
python数字类型math库原理解析
2020/03/02 Python
python的Jenkins接口调用方式
2020/05/12 Python
Python定义一个Actor任务
2020/07/29 Python
Python3.9.1中使用match方法详解
2021/02/08 Python
2014年服务员个人工作总结
2014/12/23 职场文书
校长新学期寄语2016
2015/12/04 职场文书
JavaScript高级程序设计之变量与作用域
2021/11/17 Javascript
Pandas实现批量拆分与合并Excel的示例代码
2022/05/30 Python