标签:触发 angular zone 检测 js Angular 变更
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标签:触发,angular,zone,检测,js,Angular,变更 来源: https://www.cnblogs.com/webwy/p/15865796.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。