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就正常,但项目需要兼容旧库,该怎么处理这种情况?
设计师青霞
Lv1
最简单的办法是把 zone.run() 换成在回调里直接调用 this.cdRef.detectChanges(),记得在构造函数注入 ChangeDetectorRef。
点赞
6
2026-02-12 11:43