Angular使用*ngFor渲染数据时出现NG0900错误求助
Angular NG0900错误排查方案
以下是针对遇到的“*ngFor正常渲染但控制台抛出NG0900”问题的排查方向:
检查
editions初始值类型
如果组件初始化时把editions设为对象(比如editions = {}),哪怕后续赋值成数组,Angular首次渲染模板时会尝试遍历初始的对象,进而抛出错误。解决办法:将初始值设为空数组:editions: Cigales[] = [];确认模板绑定变量正确性
核对HTML模板里*ngFor绑定的是不是editions,有没有写错变量名(比如误写成单个对象edition)。比如错误示例:<!-- 错误:绑定了单个对象edition --> <div *ngFor="let item of edition">{{item.name}}</div>正确绑定要指向数组:
<div *ngFor="let item of editions">{{item.name}}</div>排查异步赋值的临时值问题
如果在获取数据的异步流程里,有短暂把editions赋值为对象的操作(比如请求发起时临时赋值占位),哪怕后续改成数组,变更检测还是会捕捉到中间的对象状态并报错。要避免这种写法:// 错误:临时赋值对象 this.editions = {}; this.cigalesService.getEditions().subscribe(res => { this.editions = res; });验证服务返回数据结构
虽然打印this.editions是数组,但可以在订阅回调里再加一层验证,确保服务返回的确实是数组,而非嵌套在对象里的数组:this.cigalesService.getEditions().subscribe(res => { // 若服务返回{ data: [...] }这类结构,需提取数组部分 this.editions = Array.isArray(res) ? res : res.data; console.log(Array.isArray(this.editions)); // 再次确认类型 });
内容的提问来源于stack exchange,提问作者Hicham ELhlaissi
相关产品推荐
相关产品推荐

