首页 文章

Angular:ERROR TypeError:无法读取undefined的属性___

提问于
浏览
3

即使值在浏览器中呈现,我也会收到这些错误 . 我不知道如何解决这个问题 .

ERROR TypeError:无法读取未定义的属性'length'错误类型错误:无法读取未定义的属性'FirstName'

Component.ts:

teams: Team[];

ngOnInit() {
  this.getTeams();
}

constructor(private m: DataManagerService, private router: Router) { 
}

getTeams(): void {
  this.m.getTeams().subscribe(teams => this.teams = teams);
}

select(em: Team){
  this.router.navigate(['/teamView',em._id]);
}

Component.html:

<div class="panel-body">
  <table class="table table-striped">
    <tr>
      <th>Team name</th>
      <th>Name of Team Leader</th>
    </tr>
    <tr *ngFor='let team of teams' (click)="select(team)">
      <td>{{team.TeamName}}</td>
      <td>{{team.TeamLead.FirstName}} {{team.TeamLead.LastName}}</td>
    </tr>
  </table>
  <hr>
</div>

Team.ts:

export class Team {
    _id: string;
    TeamName: string;
    TeamLead: Employee;
    Projects:{};
    Employees: {};
}

Object:

https://lit-coast-73093.herokuapp.com/teams

DataManagerService.ts

teams: Team[];
projects: Project[];
employees: Employee[];

constructor(private http: HttpClient) { 
}

getTeams(): Observable<Team[]> {
    return this.http.get<Team[]>(`${this.url}/teams`)
  }

getProjects(): Observable<Project[]> {
    return this.http.get<Project[]>(`${this.url}/projects`)
}

getEmployees(): Observable<Employee[]> {
    return this.http.get<Employee[]>(`${this.url}/employees`)
}

2 回答

  • 2
    <tr *ngIf='teams.length > 0' *ngFor='let team of teams' (click)="select(team)">
      <td>{{team?.TeamName}}</td>
      <td>{{team?.TeamLead?.FirstName}} {{team?.TeamLead?.LastName}}</td>
    </tr>
    

    可能性:a)Teams对象尚未填充 . 因此,没有什么可以迭代b)您的API响应没有所有预期的属性 .

    添加像我上面建议的检查应该可以解决您的问题 . LMK,如果我可以进一步解释 .

  • 1

    因为 teams 可能还没有,

    你可以尝试这种方式:

    <div class="panel-body">
      <table class="table table-striped">
        <tr>
          <th>Team name</th>
          <th>Name of Team Leader</th>
        </tr>
        <tr *ngFor='let team of teams' (click)="select(team)">
          <td>{{team.TeamName}}</td>
          <td>{{team.TeamLead?.FirstName}} {{team.TeamLead?.LastName}}</td>
        </tr>
      </table>
      <hr>
    </div>
    

    工作演示:

    https://stackblitz.com/edit/angular-tutorial-2yzwuu?file=app%2Fapp.component.html

相关问题