一.$watch的作用

监听model,如果model发生变化,则触发某些事情。

二.$watch的格式

$scope. $watch(watchFn,watchAction,deepWatch);

解释:

watchFn:表示一个,angular表达式或者函数的字符串。

watchAction:watchFn发生变化的时候触发此函数,参数为一个function。

deepWatch:可选的布尔值命令,检查被监控的每个属性是否发证变化,只对监听对象时有用,如果第三个参数为true则被监听对象的每一个属性变更都会触发第二个参数function,如果为false则只检查监听对象的对象引用地址,如果属性变了,但是引用地址没变,不会触发,除非你改为了其他对象。

三.实例

1.$watch 单一的变量

对于普通的变量时,如数字,字符串等,直接如下写是可以监视到变量的变化,并执行相应的函数的。

$scope.count=1;

$scope.$watch('count',function(){

...

});

2.$watch 多个变量

对于多个变量的监视变化,执行同一函数的话,可以将这几个变量转为字符串,以‘+’号隔开来进行监视

//当count或page变化时,都会执行这个匿名函数

$scope.count=1;

$scope.page=1;

$scope.$watch('count + page',function(){

...

});

3.$watch对象或数组

3.1不添加第三个参数:

 
不添加第三个参数测试代码
 
没有输入时的结果
 
name输入框输入内容
 
 
年龄输入框输入内容
 

如果直接监听user是改变输入框是不会有值的。

3.2添加第三个参数:

 
添加第三个参数测试代码

不管哪个输入框的值发生改变都会有弹框出现。

4.$watch 函数的返回结果

在写代码的时候,有时会遇到要监视一个函数返回的结果是否变化的情况,所以查了一下$watch 监视函数的情况。

$scope.todoList = []; //可改变

$scope.fun=function(){

var count =0;

angular.forEach($scope.todoList,function(todo){

count += todo.done ?0:1;

});

return count;

};

$scope.$watch('fun()',function(data){

console.log(data); //获取到数据

});

5.取消$watch

var fun=$scope.$watch('todoList',function(){

//调用fun()取消这个watch

fun();

});

自己项目中的用法:

$scope.$watch(angular.bind(vm, function () {

// do somethin监听某个值的变化。

}), nextFunction, true);

function nextFunction(oldValue,newValue){

//do something

}

随机推荐

  1. ASP.NET MVC过滤器学习笔记

    1.过滤器的两个特征 1.他是一种特性,可以引用到控制器类和Action方法上.比如下图 这里控制器类和action方法都引用了过滤器,这个过滤器是用来做授权的 2.特征继承自FilterAttrib ...

  2. C++调用linux命令并获取返回值

    qt中封装了相关的方法, 但是因为我的命令中用到了管道命令, 出现了非预期结果, 所有改用了linux系统原生的方法. 下边是一个判断某进程是否存在的例子. 当前存在一个问题,当linux返回多行时, ...

  3. java都是值传递,没有引用传递

    博主这几天在复习 javaSE 部分的内容时,遇到了关于参数传值的问题,但是始终不知道原因,上网上一查才知道钻牛角尖了,把C语言的参数传值转移到java中了. 相信很多在学习java之前,有接触过C/ ...

  4. Python基础18

    “为什么有列表,还要元组?” 1. 元组可看成是简单的对象组合,而列表是随时间改变的数据集合. 2. 元组的不可变特性提供了某种完整性,确保元组不会被另一个引用来修改.类似于其它语言中的常数声明.

  5. Linux出现You have new mail in /var/spool/mail/root提示,关闭邮件提示清理内容的解决方案

    Linux出现You have new mail in /var/spool/mail/root提示,关闭邮件提示的解决方案 有的时候敲一下回车,就出来You have new mail in /va ...

  6. undefined reference to `BN_new'

    出现如下错误 undefined reference to `BN_CTX_new' undefined reference to `BN_new' undefined reference to `B ...

  7. this.$route和this.$router区别

    this.$route 和 this.$router 这两个对象有什么区别: this.$route 是当前路由跳转对象,包含当前路由的name.path.query.params等属性 this.$ ...

  8. 数据库系统(五)---MySQL基础

    一.SQL基本概念: SQL 已经成为关系数据库的标准语言,是一种数据库查询和程序设计语言,用 于存取数据以及查询.更新和管理关系数据库系统. 功能不仅仅是查询,还包括数据定义.数据操纵和数据控制等于 ...

  9. supervisor 管理应用程序

    supervisor 进程管理 主要包含后台进程 supervisord 和控制台 supervisorctl 两个程序 supervisor # 官方文档 http://www.supervisor ...

  10. 更换Ubuntu软件源

    对于Ubuntu系统, 不同的版本的源都不一样,每一个版本都有自己专属的源. 而对于 Ubuntu 的同一个发行版本,它的源又分布在全球范围内的服务器上.Ubuntu 默认使用的官方源的服务器在欧洲, ...