0

我有一个角度项目,在我的组件中,我使用 graphql 获取数据,并在 HTML 中显示结果的图像。但是有一会儿,我在控制台中收到了这个错误:

ERROR TypeError: Cannot read property 'image' of undefined

这是我的html代码:

<div
[style.background-image]="
'url(http://localhost:1337' + (data.article.image.url )+ ')'
"
>
</div>

在我的组件中,我有:

ngOnInit(): void {
this.queryArticle = this.apollo
.watchQuery({
  query: ARTICLE_QUERY,
  variables: {
    id: this.route.snapshot.paramMap.get("id")
  }
}).valueChanges.subscribe(result => {
  this.data = result.data;
  this.loading = result.loading;
  this.errors = result.errors
});
}

现在,我怎样才能避免这个错误?

4

1 回答 1

1

您不需要使用async管道,我认为您需要使用安全导航运算符。

把它放在你的 HTML 中(添加问号):

<div
[style.background-image]="
'url(http://localhost:1337' + (data?.article?.image?.url )+ ')'
"
>
</div>

它基本上会确保数据存在,然后文章存在于数据中,并且图像存在于文章中。

在此处了解有关安全导航操作员的更多信息。

有一种使用async管道的方法,但我看到你看到subscribe了 observable 并且你设置了 , 和 的值dataloading并且errors它将涉及更多的工作来使用async管道获取这些属性。

于 2021-07-05T22:49:04.320 回答