Angular中如何从API返回的JobOffer的JobApplication中展示候选人全名并解决NgFor迭代错误
解决Angular中NgFor迭代错误并正确展示候选人全名
首先咱们先理清报错的根源:Cannot find a differ supporting object '[object Object]'这个错误,是因为你试图用*ngFor遍历一个单一对象,而不是数组。从你的代码和尝试来看,jobApplication里的candidate字段是单个候选人对象,而非候选人数组,所以用*ngFor循环它必然会报错。另外你模板里还有个小问题:外层循环的变量名用了job,和组件里的this.job重名了,会导致作用域混乱,容易引发意外问题。
修正后的模板代码
直接移除遍历candidate的多余*ngFor,同时修改循环变量名避免冲突:
<div cdkDropListGroup *ngIf="job"> <!-- 添加*ngIf防止数据未加载时的报错 --> <div class="example-container" *ngFor="let items of job.phaseT.items; index as i"> <h3>{{items.phaseItem}} PHASE</h3> <div cdkDropList id="{{items.id}}" [cdkDropListData]="items.phaseItem" class="item-list" [cdkDropListConnectedTo]="connectedTo" (cdkDropListDropped)="drop($event)"> <!-- 把循环变量名改成application,避免和组件的job变量冲突 --> <div class="example-box" *ngFor="let application of job.jobApplications" cdkDrag [cdkDragData]="application"> <!-- 直接访问单个候选人对象的fullname属性 --> {{application.candidate.fullname}} -- {{application.appliedDate | date}} - <button class="button btn-primary" [routerLink]="['/candidateProfile']">View Profile</button> </div> </div> </div> </div>
关键修正点说明
- 移除多余的
*ngFor:application.candidate是单个对象,不是数组,不需要用*ngFor遍历,直接通过.访问属性即可。 - 避免变量名冲突:把循环里的
job改成application,既不会和组件级的job变量混淆,代码可读性也更强。 - 添加空值保护:在最外层容器加上
*ngIf="job",或者用可选链操作符job?.phaseT?.items,可以避免API数据还未返回时,job为undefined导致的额外报错。
为什么你之前的尝试不对?
你写的<div class="example-container" *ngFor="let candidate of job.jobApplications.candidate;"></div>,这里job.jobApplications是一个数组,每个数组元素才是包含candidate对象的求职申请,所以不能直接用job.jobApplications.candidate,必须先遍历job.jobApplications数组,再访问每个元素里的candidate对象。
内容的提问来源于stack exchange,提问作者 Aziz
相关产品推荐
相关产品推荐

