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 相关文章推荐
Prototype Date对象 学习
Jul 12 Javascript
JavaScript对象学习经验整理
Oct 12 Javascript
原生js获取宽高与jquery获取宽高的方法关系对比
Apr 04 Javascript
js实现简单的可切换选项卡效果
Apr 10 Javascript
jquery右下角自动弹出可关闭的广告层
May 08 Javascript
javascript js 操作数组 增删改查的简单实现
Jun 20 Javascript
jQuery中 bind的用法简单介绍
Feb 13 Javascript
基于node.js制作简单爬虫教程
Jun 29 Javascript
JavaScript表单即时验证 验证不成功不能提交
Aug 31 Javascript
angularjs实现时间轴效果的示例代码
Nov 29 Javascript
解决vue中使用Axios调用接口时出现的ie数据处理问题
Aug 13 Javascript
jQuery实现根据身份证号获取生日、年龄、性别等信息的方法
Jan 09 jQuery
关于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
JavaScript创建命名空间的5种写法
2014/06/24 PHP
PHP实现适用于自定义的验证码类
2016/06/15 PHP
浅谈php数组array_change_key_case() 函数和array_chunk()函数
2016/10/22 PHP
PHP面向对象程序设计__tostring()和__invoke()用法分析
2019/06/12 PHP
javascript 数组学习资料收集
2010/04/11 Javascript
Kibo 用于处理键盘事件的Javascript工具库
2011/10/28 Javascript
JQuery select控件的相关操作实现代码
2012/09/14 Javascript
JS小功能(setInterval实现图片效果显示时间)实例代码
2013/11/28 Javascript
JavaScript定义类的几种方式总结
2014/01/06 Javascript
ie9 提示'console' 未定义问题的解决方法
2014/03/20 Javascript
js动态修改表格行colspan列跨度的方法
2015/03/30 Javascript
JavaScript中使用concat()方法拼接字符串的教程
2015/06/06 Javascript
Avalon中文长字符截取、关键字符隐藏、自定义过滤器
2016/05/18 Javascript
Javascript字符串常用方法详解
2016/07/21 Javascript
微信小程序 MINA文件结构
2016/10/17 Javascript
详解Bootstrap各式各样的按钮(推荐)
2016/12/13 Javascript
jQuery插件FusionCharts实现的2D柱状图效果示例【附demo源码下载】
2017/03/06 Javascript
JavaScript观察者模式(publish/subscribe)原理与实现方法
2017/03/30 Javascript
JS实现提交表单前的数字及邮箱校检功能
2017/11/13 Javascript
node中的session的具体使用
2018/09/14 Javascript
Vue实现简单的拖拽效果
2020/08/25 Javascript
python字典基本操作实例分析
2015/07/11 Python
详解Swift中属性的声明与作用
2016/06/30 Python
Python中使用bidict模块双向字典结构的奇技淫巧
2016/07/12 Python
python2.7和NLTK安装详细教程
2018/09/19 Python
Python3.5 Pandas模块之Series用法实例分析
2019/04/23 Python
使用Python进行防病毒免杀解析
2019/12/13 Python
15个Pythonic的代码示例(值得收藏)
2020/10/29 Python
英国家具、照明、家居用品网上商店:Wayfair.co.uk
2020/02/13 全球购物
干部下基层实施方案
2014/03/14 职场文书
心理健康日活动总结
2014/05/08 职场文书
学校班班通实施方案
2014/06/11 职场文书
证券公司客户经理岗位职责
2015/04/09 职场文书
2015年城乡环境综合治理工作总结
2015/07/24 职场文书
详解Redis瘦身指南
2021/05/26 Redis
Windows Server 2016服务器用户管理及远程授权图文教程
2022/08/14 Servers