javascript - JSON 属性未定义即使包含数据的变量填充了 JSON 对象
问题描述
我正在尝试通过获取请求从我的数据库中接收 MongoDB 文档。我已经通过 Postman 测试了 URL,并按预期返回了文档。这让我意识到问题出在前端而不是服务器。当我通过前端执行相同操作时,它会检索数据,并存储在变量res中并分配给this.englishteam,因此可以在 GetSingleEnglishTeam 的函数范围之外访问它。
public teamenglish!:EnglishTeam;
GetSingleEnglishTeam(_id: string) {
this.englishTeamService.GetSingleEnglishTeam(_id).subscribe((res)=>{
console.log("The team: "+ res);
this.teamenglish = res;
// console.log(this.teamenglish);
})
}
但是,当我尝试访问存储在teamenglish中的ClubName时,我收到一个未定义的错误
错误类型错误:无法读取 ClubHonoursComponent_Template (club-honours.component.html:9) 处未定义的属性“ClubName”
Club-honours.component.html
<div class="row">
<div class="column">
<div class="PremierLeagues" >
{{teamenglish.ClubName}}
</div>
</div>
获取对服务器的请求
GetSingleEnglishTeam(_id: string){
console.log( "ID is "+_id);
return this.http.get<EnglishTeam>('http://localhost:3000/api/getTeamEn/' + `${_id}`);
}
当我控制台记录包含 JSON 对象的变量时,我得到 [Object Object]。
我想要做的是能够向服务器发送一个 getOne 请求,然后服务器返回单个文档。谁能看到我哪里出错了?
解决方案
问题是模板在teamenglish
变量可以在回调中设置之前被初始化subscribe
。
您可以通过 3 种方法解决此问题 -
1.) 在您的模板文件中使用安全导航运算符 (?)
,即 -
{{teamenglish?.ClubName}}
2.) 在容器 div 上使用 *ngIf 仅在teamenglish
可用时呈现自身(一旦您的可观察回调将其设置为teamenglish
即 -
<div *ngIf="teamenglish" class="PremierLeagues" >
{{teamenglish.ClubName}}
</div>
3.)async
在模板中使用管道自动处理订阅和值解析,即
在您的ts
文件中,将观测值分配给一个变量,例如 -
const obs = this.englishTeamService.GetSingleEnglishTeam(_id)
然后在您的模板文件中 -
{{obs | async | json}}
推荐阅读
- regex - 记事本++中带有2个分号的正则表达式
- css - 将 css 转换放入变量中
- c# - 如何在c#winforms中将登录人用户名插入数据库?
- python - 如何在ODOO的自定义模板中显示产品名称、产品价格和产品图片?
- elasticsearch - 为什么有时 Elasticsearch 滚动或搜索会返回一组无法单独检索的文档 ID?
- r - 如何用视觉光谱颜色填充曲线下的区域
- node.js - node.js如何从远程服务器读取流中的文件
- php - 我可以将一个 wordpress 站点的所有帖子显示到另一个 wordpress 站点,并将单独的域作为所有帖子的前缀吗?
- selenium - Headless chrome 不支持使用 selenium 网络驱动程序查看 pdf?
- php - Auth::user() 在 ServiceProvider 中返回 null