$watch、$digest、$apply

$watch、$digest、$apply 

$watch 代表的就是对数据源的监听,当数据源发生变化,就会触发第二个参数的回调函数 
$digest 代表触发一个数据源变化的事件 
$apply 代表对于$digest的一个封装,他多了一个参数 

$watch 
第一个参数就是要监听的数据源 
第二个参数就是当监听的数据源发生变化了,触发的一个回调函数,回调函数包含两个参数,分别代表(新值、旧值) 

$digest 是用来手动触发监听事件的,通常不需要手动触发,而是由$apply来调用 

$apply 只是把$digest 做了一次封装,来提供手动触发,那么为什么需要手动触发呢,正常情况下,在angular下,修改数据源就会自动触发,但是要是不在angular上下文的情况下,如浏览器DOM事件,setTimeout执行,这种情况下,angular无法获取到事件,所以,通过apply来手动触发一下,在apply的参数中去修改数据源 


$observe,他是在定义Directive的时候,针对link的第三个参数attr来做的监听 
attr,实际上就是定义的元素上的attribute参数,通过attr可以获取DOM中的参数 
通过$observe来进行监听,当参数的值发生变化了,就会触发回调函数,他和watch的不同就是,监听的宿主对象不同

原文地址:https://www.cnblogs.com/yuyutianxia/p/4781787.html