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 相关文章推荐
Javascript实例教程(19) 使用HoTMetal(5)
Dec 23 Javascript
javascript 带有滚动条的表格,标题固定,带排序功能.
Nov 13 Javascript
Jquery实战_读书笔记2 选择器
Jan 22 Javascript
让你的博文自动带上缩址的实现代码,方便发到微博客上
Dec 28 Javascript
DOM_window对象属性之--clipboardData对象操作代码
Feb 03 Javascript
JS判断当前日期是否大于某个日期的实现代码
Sep 02 Javascript
jquery ajax 局部无刷新更新数据的实现案例
Feb 08 Javascript
javascript中apply、call和bind的使用区别
Apr 05 Javascript
jQuery插件jqGrid动态获取列和列字段的方法
Mar 03 Javascript
关于vue-router的beforeEach无限循环的问题解决
Sep 09 Javascript
微信小程序实现抖音播放效果的实例代码
Apr 11 Javascript
Vue绑定用户接口实现代码示例
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
给php新手谈谈我的学习心得
2007/02/25 PHP
UCenter Home二次开发指南
2009/05/28 PHP
PHP的substr_replace将指定两位置之间的字符替换为*号
2011/05/04 PHP
PHP中的strtr函数使用介绍(str_replace)
2011/10/20 PHP
基于PHP-FPM进程池探秘
2017/10/17 PHP
php实现生成PDF文件的方法示例【基于FPDF类库】
2018/07/21 PHP
Prototype使用指南之string.js
2007/01/10 Javascript
jquery实现右侧栏菜单选择操作
2016/03/04 Javascript
谈谈对JavaScript原生拖放的深入理解
2016/09/20 Javascript
利用JS实现scroll自定义滚动效果详解
2017/10/17 Javascript
微信小程序使用template标签实现五星评分功能
2018/11/03 Javascript
vue form check 表单验证的实现代码
2018/12/09 Javascript
Node.js Event Loop各阶段讲解
2019/03/08 Javascript
javascript实现计算器功能
2020/03/30 Javascript
[49:20]VG vs TNC Supermajor小组赛B组败者组决赛 BO3 第二场 6.2
2018/06/03 DOTA
Python中二维列表如何获取子区域元素的组成
2017/01/19 Python
python中is与双等于号“==”的区别示例详解
2017/11/21 Python
python3.6下Numpy库下载与安装图文教程
2019/04/02 Python
Python制作微信好友背景墙教程(附完整代码)
2019/07/17 Python
详解Django CAS 解决方案
2019/10/30 Python
通过Python实现一个简单的html页面
2020/05/16 Python
Django中template for如何使用方法
2021/01/31 Python
安全的后院和健身蹦床:JumpSport
2019/07/15 全球购物
英国领先的豪华时尚家居网上商店:Amara
2019/08/12 全球购物
美国球迷装备的第一来源:FOCO
2020/07/03 全球购物
市场营销专业推荐信
2013/11/03 职场文书
管理部部长岗位职责
2013/12/05 职场文书
怎样写演讲稿
2014/01/04 职场文书
高一生物教学反思
2014/01/17 职场文书
小学运动会表扬稿
2014/01/19 职场文书
学校教师安全责任书
2014/07/23 职场文书
乡镇党的群众路线教育实践活动总结报告
2014/10/30 职场文书
2015年清明节演讲稿范文
2015/03/17 职场文书
乡镇法制宣传日活动总结
2015/05/05 职场文书
《检阅》教学反思
2016/02/22 职场文书
2016年学校党支部公开承诺书
2016/03/25 职场文书