Angular中为什么第三方异步回调不触发变更检测?
我在用Angular开发时,用第三方库发起异步请求,数据返回后赋值给组件属性但视图没更新。尝试用NgZone.run()包裹也没效果,控制台没有任何报错,这是为什么?
比如这样调用:this.http.get(...)没问题,但换成原生fetch后数据回来赋值就不触发渲染了。我查了说是Zone.js没监控到,但按文档写的zone.run()似乎没起作用。
// component.ts片段
constructor(private zone: NgZone) {}
loadData() {
fetch('api/endpoint')
.then(res => res.json())
.then(data => {
// 这里修改组件属性
this.zone.run(() => this.items = data); // 没有触发视图更新
});
}
如果把fetch换成Angular的HttpClient就正常,但项目需要兼容旧库,该怎么处理这种情况?
NgZone.run()包裹在fetch外层,不是在 then 里面:或者更简单,用
ApplicationRef.tick():