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 相关文章推荐
Web版彷 Visual Studio 2003 颜色选择器
Jan 09 Javascript
JavaScript 继承的实现
Jul 09 Javascript
JavaScript实现单击下拉框选择直接跳转页面的方法
Jul 02 Javascript
JS工作中的小贴士之”闭包“与事件委托的”阻止冒泡“
Jun 16 Javascript
微信小程序  modal详解及实例代码
Nov 09 Javascript
Vue上传组件vue Simple Uploader的用法示例
Aug 25 Javascript
JS中跳出循环的示例代码
Sep 14 Javascript
ReactNative中使用Redux架构总结
Dec 15 Javascript
vee-validate vue 2.0自定义表单验证的实例
Aug 28 Javascript
VUE+Element环境搭建与安装的方法步骤
Jan 24 Javascript
html实现随机点名器的示例代码
Apr 02 Javascript
浅谈JavaScript浅拷贝和深拷贝
Nov 07 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原创论坛
2006/10/09 PHP
用PHP的ob_start();控制您的浏览器cache!
2007/02/14 PHP
php获取目录中所有文件名及判断文件与目录的简单方法
2017/03/04 PHP
jQuery库与其他JS库冲突的解决办法
2010/02/07 Javascript
jQuery 对Select的操作备忘记录
2011/07/04 Javascript
自动最大化窗口的Javascript代码
2013/05/22 Javascript
禁止选中文字兼容IE、Chrome、FF等
2013/09/04 Javascript
jQuery基础知识小结
2014/12/22 Javascript
jQuery实现渐变下拉菜单的简单方法
2015/03/11 Javascript
jquery.form.js实现将form提交转为ajax方式提交的方法
2015/04/07 Javascript
js实现带按钮的上下滚动效果
2015/05/12 Javascript
Javascript中arguments用法实例分析
2015/06/13 Javascript
基于jquery实现智能表单验证操作
2016/05/09 Javascript
微信小程序 Video API实例详解
2016/10/02 Javascript
JS验证字符串功能
2017/02/22 Javascript
for循环 + setTimeout 结合一些示例(前端面试题)
2017/08/30 Javascript
原生JS获取元素的位置与尺寸实现方法
2017/10/18 Javascript
vue-router路由与页面间导航实例解析
2017/11/07 Javascript
Vue实现左右菜单联动实现代码
2018/08/12 Javascript
vue基于element的区间选择组件
2018/09/07 Javascript
Layui Table js 模拟选中checkbox的例子
2019/09/03 Javascript
javascript+Canvas实现画板功能
2020/06/23 Javascript
Python lambda函数基本用法实例分析
2018/03/16 Python
python删除本地夹里重复文件的方法
2020/11/19 Python
基于python绘制科赫雪花
2018/06/22 Python
python利用后缀表达式实现计算器功能
2021/02/22 Python
详解使用双缓存解决Canvas clearRect引起的闪屏问题
2019/04/29 HTML / CSS
出门问问全球官方商城:Tichome音箱和TicWatch智能手表
2017/12/02 全球购物
墨尔本照明批发商店:Mica Lighting
2017/12/28 全球购物
Pop In A Box英国:Funko POP搪胶公仔
2019/05/27 全球购物
党校培训思想汇报
2013/12/30 职场文书
原告代理词范文
2015/05/25 职场文书
服务行业标语口号
2015/12/26 职场文书
幼儿园师德师风心得体会
2016/01/12 职场文书
初中物理教学反思
2016/02/19 职场文书
Python如何配置环境变量详解
2021/05/18 Python