angular - Angular 7 Typerror:无法读取未定义的属性“userId”
问题描述
我正在使用 Angular 7 并尝试在表格中显示一些数据。我在控制台中收到此错误:ERROR TypeError: Cannot read property 'userId' of undefined at Object.eval [as updateRenderer]
. 如果我使用?
运算符,我会得到 NaN 作为我的数据。
我正在注销从服务器接收到的数据,并且我得到了所有这些数据,所以问题应该出在我认为在我的组件 .ts 或 html 代码中的前端。
我的html:
<tr *ngFor="let on-callduty of OnCallDuties">
<td><button mat-raised-button color="primary" (click)="updateOnCallDuty(on-callduty.id)">
<mat-icon><i class="material-icons">edit</i>
</mat-icon>
</button></td>
<td><button mat-raised-button color="accent" (click)="deleteOnCallDuty(on-callduty)">
<mat-icon><i class="material-icons">delete_forever</i>
</mat-icon>
</button></td>
<td>{{on-callduty.userId}}</td> <--- causes error
<td>{{on-callduty.typeId}}</td>
<td>{{on-callduty.dateFrom}}</td>
<td>{{on-callduty.dateTo}}</td>
我的 ts:
OnCallDuties: OnCallDuty[];
onCallDuty: OnCallDuty = new OnCallDuty("", "", "", "");
constructor(private router: Router,
private httpClientService: DutyService) { }
ngOnInit() {
this.httpClientService.getOnCallDuty().subscribe(
response => {
this.OnCallDuties = response;
console.log(this.OnCallDuties);
}
);
}
解决方案
您可以使用安全导航运算符?.
。它在访问变量的属性之前检查是否定义了变量。
<tr *ngFor="let on-callduty of OnCallDuties">
<td>
<button mat-raised-button color="primary" (click)="updateOnCallDuty(on-callduty?.id)">
<mat-icon><i class="material-icons">edit</i>
</mat-icon>
</button>
</td>
<td>
<button mat-raised-button color="accent" (click)="deleteOnCallDuty(on-callduty)">
<mat-icon><i class="material-icons">delete_forever</i>
</mat-icon>
</button>
</td>
<td>{{on-callduty?.userId}}</td>
<td>{{on-callduty?.typeId}}</td>
<td>{{on-callduty?.dateFrom}}</td>
<td>{{on-callduty?.dateTo}}</td>
...
还要检查对象是否实际包含该userId
属性。如果不是,则在使用安全导航运算符时不会呈现。
更新:NaN
局部变量名称中的连字符似乎on-callduty
弄乱了指令。将其更改为其他内容(例如。on_callduty
)。
<tr *ngFor="let on_callduty of OnCallDuties">
<td>
<button mat-raised-button color="primary" (click)="updateOnCallDuty(on_callduty?.id)">
<mat-icon><i class="material-icons">edit</i>
</mat-icon>
</button>
</td>
<td>
<button mat-raised-button color="accent" (click)="deleteOnCallDuty(on_callduty)">
<mat-icon><i class="material-icons">delete_forever</i>
</mat-icon>
</button>
</td>
<td>{{on_callduty?.userId}}</td>
<td>{{on_callduty?.typeId}}</td>
<td>{{on_callduty?.dateFrom}}</td>
<td>{{on_callduty?.dateTo}}</td>
...
推荐阅读
- git - 我使用 SHA 在远程分支上推送了一个提交,该 SHA 删除了 7 个过去的提交
- python - Cybersource 无声订单与 3D 安全
- r - R:更改循环内的对象
- asp.net-mvc - 如何在 ASP MVC 中使用 Elastic Beanstalk 环境属性
- reactjs - 无法在 React 的路由上加载 JS 包
- recursion - Python:赢得决胜局比赛的条件概率
- android - 打开下载的 PDF 文件
- python - 将 CLI 工具部署为包
- php - 使用干预将图像转换为灰度
- mysql - 如何在 MySQL 中使用 subselect 来获取所有唯一名称及其计数?