1、angular如何以及何时根据数据模型更新html
答:angular使用zone.js来进行变更检测,zone是
一个跨异步任务持久化存在的执行上下文,同时angular提供了
ngzone服务类,来在组件中使用zone的能力
a、执行时机:会在angular组件初始化、触发DOM事件、数据请求、宏任务、微任务、其他异步操作(websocket.onmessage\canvas.toBlob)时进行数据的变更检测
b、
获取上下文以及生命周期:可以通过Zone.current来
获取当前的上下文,可以通过Zone.current.
fork()方法配置对应的生命周期钩子
c、手动触发变更检测:
ngzone.run()
方法的回调中执行一些异步
函数,并在
方法执行后的合适时间触发变更检测
d、手动指定不触发变更检测:
ngzone.runOutSideAngular()
方法的回调中
添加一些不需要触发变更检测的
函数
2、猴子补丁
答:在运行时
添加或
修改函数的
默认行为,并且不会更改源
代码的技术,而zone.js对DOM事件、HTTP请求、宏任务、微任务以及其他异步任务进行了包装,在监听到事件时会触发angular的tick()
方法,并在tick()
方法内部
调用detectChange()
方法实现变更检测
3、配置zone.js不需要监听的事件或者操作
答:定义zone-flags.ts
文件,并在
polyfills.ts
文件中import 'zone.js';语句之前导入,zone-flags.ts
文件内容定义方式如:
(window as any).__Zone_
disable_requestAnimationFame = false; // 过滤需要监听的任务
(window as any).__zone_symbol__UNPATCHED_EVENTS = ['scroll', 'mousemove']; // 过滤需要监听的DOM事件
注意:配置文档:
https://github.com/angular/angular/blob/master/packages/zone.js/MODULE.md
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。