$watch 是在angularjs中常用的一个方法,他可以监听页面中的元素,在他们发生变化的时候,做出相应的变化。今天简单介绍一下我使用的两种用法。
监听一个对象
先来看一下他的基本用法:
|
|
可以看到上面有三个参数,第一个是我们要监听的对象,他以字符串的方式呈现;
第二个参数是一个回调函数,他是我们在监听到变化是做的动作。他有三个参数:newValue,oldValue,scope。看名字就能知道这三个参数的含义:新值,旧值,当前作用域。
第三个参数是一个可选项,他是一个布尔值,使用angular.equals来比较对象,默认是false。
示例代码:
html部分:
|
|
js部分:
|
|



当我们改变输入框中的数字时,在控制台中就会出现这是一个新值!的字样。
监视多个对象
$watch 在监视两个对象的时候,后面的参数都和上面的相同,只有第一个是不一样的,变成了一个数组。
|
|
在监听两个变量的时候,我们看一下newValue是怎么个样子的:
下面的部分以项目中的指令为例:
|
|

监听了两个对象,反回来的当然也是两个对象了。那么我们就可在分别对这两个对象做一些事情,在第一个对象变化的时候和第二个对象变化的时候做不同的事情。
比如第一个变化的时候打印1,第二个变化的时候打印2:
|
|



这里就有人要问了,为什么我第一张打印的是2,而第二张打印的是1呢?原因是我们数组中对象的顺序与我们监听时设立的顺序是一样的:[instrumentType, discipline]。
我的应用
两个指令相互关联,但是又允许单独使用,所以就使用了上面的监听两个对象的做法。
效果展示:



总结
$watch是一个有趣且灵活的函数,当然$watch的用法还不止我所说的这几种,还有很多其他的用法。 参考网址