Angular中“teams”是否为保留字?变量命名引发*ngFor报错求助
解决Angular模板
*ngFor遍历teams变量触发类型错误的问题 问题场景
组件类中定义了数组变量teams: Team[] = [],但在模板中使用<fieldset *ngFor="let team of teams">时,触发错误:Type 'HTMLSelectElement' is not assignable to type 'NgIterable<any>',将变量名改为tms等其他名称后,错误消失。
问题原因
这是组件变量名与模板中的DOM元素id/name冲突导致的:
Angular会自动把模板中带有id或name属性的表单元素(比如<select>、<input>)注册为模板引用变量。如果你的模板里存在某个表单元素的id="teams"或name="teams",模板解析时会优先把teams指向这个DOM元素(HTMLSelectElement类型),而不是你在组件类中定义的数组变量,自然无法用*ngFor遍历DOM元素,从而抛出类型不匹配的错误。
解决方案
有三种可行的解决方式,按需选择:
方式1:修改组件变量名(已验证有效)
把组件类中的teams改成不会和DOM元素冲突的名称,比如teamList、tms:teamList: Team[] = [];模板中对应改成:
<fieldset *ngFor="let team of teamList">方式2:修改冲突的DOM元素属性
检查模板中所有表单元素的id和name属性,找到值为teams的元素,修改其属性值。比如把:<select id="teams" name="teams">...</select>改成:
<select id="team-select" name="team-select">...</select>方式3:明确指定组件变量的来源
给组件添加模板引用,在模板中明确指向组件类的变量:- 在组件的根元素添加引用:
<app-raport-test #currentComponent>...</app-raport-test> - 在
*ngFor中使用该引用访问变量:<fieldset *ngFor="let team of currentComponent.teams">
- 在组件的根元素添加引用:
内容的提问来源于stack exchange,提问作者Janciu
相关产品推荐
相关产品推荐

