angular - 错误:未捕获(承诺中):TypeError:无法读取属性
问题描述
我有这个代码,
idTirada: string;
tirada: Tirada;
constructor(private tiradaService: TiradaService,
private route: ActivatedRoute ) {
this.idTirada = this.route.snapshot.paramMap.get('id');
this.tiradaService.getTirada( this.idTirada )
.subscribe( resp => {
this.tirada = resp;
console.log (resp)
});
}
我用 tiraradaService 阅读了 Firebase,它返回了一个包含信息的数组
{arc: "-M9TuPty-oGAmgmnh0WL", camp: "massia", data: "2020-06-14T09:47:32.878Z", plens: "0", punts: "135", …}
我在 HTML 中显示它
<ion-card-header>
<ion-card-subtitle>{{ tirada.arc }}</ion-card-subtitle>
</ion-card-header>
但是它给了我这个错误,如果我多次刷新信息它就会消失,就好像我在数据之前加载了 HTML 并且不知道从哪里获取信息
core.js:6228 ERROR Error: Uncaught (in promise): TypeError: Cannot read property 'arc' of undefined
解决方案
当 Angular 在tirada
获得赋值之前渲染视图时,它会导致异常。?.
停止评估何时tirada
为空或未定义,这通常发生在异步获取数据时,例如从服务器获取可能需要相当长的时间。
下次更改检测识别更改时,将重新评估绑定。当tirada
then 有一个值时,它将绑定tirada.arc
。
所以?.
在你的模板 HTML 中使用。
<ion-card-header>
<ion-card-subtitle>{{ tirada?.arc }}</ion-card-subtitle>
</ion-card-header>
推荐阅读
- javascript - 用 JS 替换 HTML 标记及其内容
- javascript - 在鼠标悬停时将工具提示添加到具有特定类的跨度标记
- flutter - "The method '[]' was called on null." When calling an API
- c# - 赋值返回对象...帮助理解
- c# - 反序列化对象时出现 JsonReaderException
- hadoop - 如何将小消息持续导入 Impala 并优化 Parquet 文件大小以进行查询?
- r - 超过五个类别的分类变量未显示在 R 的总和表上
- apache-spark - Spark Driver 没有分配任何工作人员
- java - 使用 VIewPager2 (Java) 的简单滑动屏幕
- python-3.x - 引发异常并在上层方法调用中除外