Angular 4 - 在异步调用后显示消息

时间:2017-06-08 08:15:12

标签: angular

我有一个页面,其中显示了帖子列表,并点击了每个帖子我正在显示该帖子的评论。这很好,我想添加的是如果没有对点击的帖子发表评论,则显示一条消息。我试过设置这样的模板:

PropertyInfo

在组件中,我尝试首先设置空的<li *ngFor="let post of posts" (click)="select(post)" > {{ post.title }} <ul *ngIf="currentPost == post && commentsVisible"> <ng-container *ngIf="currentPost.comments.length > 0;else message"> <li *ngFor="let comment of currentPost.comments" class="document"> <p>{{ comment.author }}</p> <p>{{ comment.text }}</p> </li> </ng-container> <ng-template #message>No comments for {{ post.title }}</ng-template> </ul> </li> 数组,以及一个带有属性posts的空currentPost对象:

comments

然后在方法 posts: any[] = []; currentPost: any = {}; currentPost.comments; 中,我正在获取这样的评论:

select

但是,如果我这样做,我会收到错误:

  

posts.component.html:7错误类型错误:无法读取属性&#39;长度&#39;   未定义的

如何避免该错误,并在对服务方法this.postService.getComments(post.id) .subscribe( comments => this.currentPost.comments = comments, ); 进行异步调用后检查并显示消息?

2 个答案:

答案 0 :(得分:1)

尝试currentPost.comments?.length之类的内容以消除该错误。

答案 1 :(得分:0)

此问题的更好解决方案是使用async pipe(更多信息here)。 将管道添加到* ngFor语句中。 现在的情况: <li *ngFor="let post of posts" (click)="select(post)">

使用异步管道: <li *ngFor="let post of posts | async" (click)="select(post)">