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 相关文章推荐
下载站控制介绍字数显示的脚本 显示全部 隐藏介绍等功能
Sep 19 Javascript
自定义的一个简单时尚js下拉选择框
Nov 20 Javascript
JQuery的$和其它JS发生冲突的快速解决方法
Jan 24 Javascript
Java Mybatis框架入门基础教程
Sep 21 Javascript
js阻止浏览器默认行为触发的通用方法(推荐)
May 15 Javascript
jquery select2的使用心得(推荐)
Dec 04 Javascript
Javascript设计模式之装饰者模式详解篇
Jan 17 Javascript
原生js实现验证码功能
Mar 16 Javascript
Angular2使用jQuery的方法教程
May 28 jQuery
jQuery条件分页 代替离线查询(附代码)
Aug 17 jQuery
vue实现2048小游戏功能思路详解
May 09 Javascript
javascript遍历对象的五种方式实例代码
Oct 24 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自定义函数收代码
2010/08/01 PHP
PHP不用递归遍历目录下所有文件的代码
2014/07/04 PHP
php的sso单点登录实现方法
2015/01/08 PHP
PHP+MYSQL实现用户的增删改查
2015/03/24 PHP
浅谈PHP中JSON数据操作
2015/07/01 PHP
php读取qqwry.dat ip地址定位文件的类实例代码
2016/11/15 PHP
thinkPHP5框架自定义验证器实现方法分析
2018/06/11 PHP
php 读取文件夹下所有图片、文件的实例
2018/10/17 PHP
阻止事件(取消浏览器对事件的默认行为并阻止其传播)
2013/11/03 Javascript
Javascript脚本实现静态网页加密实例代码
2013/11/05 Javascript
javascript实现在线客服效果
2015/07/15 Javascript
仅9张思维导图帮你轻松学习Javascript 就这么简单
2016/06/01 Javascript
Javascript 基础---Ajax入门必看
2016/07/06 Javascript
JavaScript省市区三级联动菜单效果
2016/09/21 Javascript
Vue2单一事件管理组件通信
2017/05/09 Javascript
jQuery实现腾讯信用界面(自制刻度尺)样式
2017/08/15 jQuery
利用adb shell和node.js实现抖音自动抢红包功能(推荐)
2018/02/22 Javascript
Vue 应用中结合vux使用微信 jssdk的方法
2018/08/28 Javascript
从零到一详聊创建Vue工程及遇到的常见问题
2019/04/25 Javascript
vue2.0基于vue-cli+element-ui制作树形treeTable
2019/04/30 Javascript
Vue基本使用之对象提供的属性功能
2019/04/30 Javascript
Vue3.0数据响应式原理详解
2019/10/09 Javascript
vue项目中使用vue-layer弹框插件的方法
2020/03/11 Javascript
简单学习Python多进程Multiprocessing
2017/08/29 Python
Python实现字符串格式化输出的方法详解
2017/09/20 Python
Python 函数基础知识汇总
2018/03/09 Python
python 列表删除所有指定元素的方法
2018/04/19 Python
python射线法判断一个点在图形区域内外
2019/06/28 Python
使用CSS3的::selection改变选中文本颜色的方法
2015/09/29 HTML / CSS
HTML5之WebGL 3D概述(下)—借助类库开发及框架介绍
2013/01/31 HTML / CSS
HTML5实现经典坦克大战坦克乱走还能发出一个子弹
2013/09/02 HTML / CSS
Reformation官网:美国女装品牌
2018/09/14 全球购物
英国百年闻名的优质健康产品连锁店:Holland & Barrett
2019/12/19 全球购物
网络教育自我鉴定
2013/11/01 职场文书
校长师德师风自我剖析材料
2014/09/29 职场文书
教师个人考察材料
2014/12/16 职场文书