angularjs现学现记之—$apply()和$digest()
2016-01-27 15:40
441 查看
angularjs的双向数据绑定是个重要的特性,它让我们的代码简洁了许多,然而它又是如何知道数据发生了变化并改变页面的呢。最近看了一篇介绍觉得十分有用
首先,在angularjs中是有$watch事件的,他的作用就是用来监听数据的变化,并且其有一个参数为回调函数,在发生变化时会执行该函数,而$digest()则是一个循环程式,当其被调用的时候就会循环遍历并触发所有model发生变化了的$watch。再说到$apply(),他就是angularjs用来调用$digest的,一般情况下它都会根据上下文的变更来自动调用,但是如果你在上下文以外的环境中更改了model,那么就需要手动调用$apply来告诉程序你进行了改动,请检查页面。比如,如果你使用了JavaScript中的setTimeout()来更新一个scope model,那么AngularJS就没有办法知道你更改了什么。这种情况下,调用$apply()就是你的责任了,通过调用它来触发一轮$digest循环
以上理解来自于http://www.cnphp6.com/archives/64167的博客,如有兴趣其正文中有更详细的解释和案例。
首先,在angularjs中是有$watch事件的,他的作用就是用来监听数据的变化,并且其有一个参数为回调函数,在发生变化时会执行该函数,而$digest()则是一个循环程式,当其被调用的时候就会循环遍历并触发所有model发生变化了的$watch。再说到$apply(),他就是angularjs用来调用$digest的,一般情况下它都会根据上下文的变更来自动调用,但是如果你在上下文以外的环境中更改了model,那么就需要手动调用$apply来告诉程序你进行了改动,请检查页面。比如,如果你使用了JavaScript中的setTimeout()来更新一个scope model,那么AngularJS就没有办法知道你更改了什么。这种情况下,调用$apply()就是你的责任了,通过调用它来触发一轮$digest循环
以上理解来自于http://www.cnphp6.com/archives/64167的博客,如有兴趣其正文中有更详细的解释和案例。
相关文章推荐
- Android之服务(二)活动和服务进行通信
- Android注解式开发BufferKnife的使用
- IOS 记录用户登陆状态
- android 验证码 (canvas)
- iOS中如何实现 压缩语音(Spexx)
- 控制输入法软键盘隐藏
- Android框架模式(1)-MVP入门
- 从零开始学Swift计时器App开发
- Android 手写Binder 教你理解android中的进程间通信
- Android traces.txt只保留最后一次发生ANR时的traces信息,那么以前的traces信息就丢失了么?
- iOS支付宝
- ios 软键盘的相关处理
- 微信公众平台--5.其他
- 讨论一个Android 异步开发中容易忽视的bug
- Android之服务
- 如何删除原生的app或者不让原生的app被编译进img
- ios记录日志和崩溃日志,并将日志文件发送到指定的邮箱
- Android camera2预览界面流程
- iOS MD5加密
- iOS 使用Block实现函数回调