angular 2视图在ngOnInit中加载数据之前呈现

kax*_*993 9 javascript fork-join observable typescript angular

我使用github API在我的角度2应用程序中加载用户及其关注者数据,但在ngOnInit完成加载数据之前查看渲染,因此我收到: Cannot read property of undefined错误.我的代码片段如下所示:

ngOnInit() {
    Observable.forkJoin(
        this._githubService.getUser('kaxi1993'),
        this._githubService.getFollowers('kaxi1993')
    )
    .subscribe(res => {
        this.user = res[0];
        this.followers = res[1];
    },
    null,
    () => {
        this.isLoading = false;
    });
}
Run Code Online (Sandbox Code Playgroud)

如果我写这样的HTML代码:

 <div *ngIf="user && user.avatar_url">
   <img class="media-object avatar" [src]="user.avatar_url" alt="...">
 </div>
Run Code Online (Sandbox Code Playgroud)

工作正常,但Cannot read property 'avatar_url' of undefined写入HTML代码时返回错误,*ngIf如下所示:

<img class="media-object avatar" [src]="user.avatar_url" alt="...">
Run Code Online (Sandbox Code Playgroud)

还要注意:getFollowers工作正常,但如果我在方法getFollowers之前移动 然后工作正常,需要避免错误.是否可以在没有额外*ngIf代码的情况下编写?任何帮助的人,非常感谢.getUsersforkJoingetUsersgetFollowers*ngIf

Gün*_*uer 11

您可以使用安全导航(Elvis)运算符来避免错误

 <div *ngIf="user?.avatar_url">
   <img class="media-object avatar" [src]="user.avatar_url" alt="...">
 </div>
Run Code Online (Sandbox Code Playgroud)

要么

<img class="media-object avatar" [src]="user?.avatar_url" alt="...">
Run Code Online (Sandbox Code Playgroud)

  • 这是正常的行为.对服务器的调用可能需要"年龄".Angular只在创建组件时呈现视图,并在数据到达时更新它(当模型更新时).有一个生命周期回调的功能请求,等待模板呈现,直到promise解析但目前不支持. (4认同)
  • 谢谢你的答案,upvoted,但我感兴趣的是,在ngOnInit中加载数据之前查看渲染是否正常? (2认同)