我有一个页面,其中显示了帖子列表,并点击了每个帖子我正在显示该帖子的评论。这很好,我想添加的是如果没有对点击的帖子发表评论,则显示一条消息。我试过设置这样的模板:
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,
);
进行异步调用后检查并显示消息?
答案 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)">