json - 无法从 Angular 的 API 访问子接口数据。我究竟做错了什么?
问题描述
这里是 Angular 7 的新手,需要一些帮助。所以我有一个如下所示的 JSON 流:
{
"Id": 25,
"Name": "XYZ Corp",
"CompanyAddresses": [
{
"Id": 39,
"CompanyId": 25,
"Address1": "998 Roosevelt Court",
...
}
]
}
company.ts & companyaddress.ts:我在 Angular 中创建了两个接口,如下所示:
import { CompanyAddresses } from './company-address';
export interface Company {
Id: number;
Name: string;
CompanyAddress: CompanyAddress[];
}
export interface CompanyAddress {
Id: number;
CompanyId: number;
Address1: string;
}
company.service.ts:然后我使用服务来填充接口,如下所示:
getCompany(id): Observable<Company> {
return this.http.get<Company>(this.baseUrl + 'company/' + id, httpOptions);
}
company.component.ts: 然后在我的组件中调用服务:
company: Company;
constructor(private companyService: CompanyService) {}
ngOnInit() {
this.activatedRoute.data.subscribe(data => {
this.company = data['company'];
});
}
现在这是我的问题。在组件的 HTML 中,我可以使用 {{company.Name}} 访问公司名称,但如果我尝试访问 CompanyAddress 中的任何数据,例如 {{company.CompanyAddress.Address1}},则无法访问这样做。属性不存在。
在将 JSON 数据转储到 Company 接口之前,是否需要在某个时候初始化 CompanyAddress 接口?
有没有更好的方法来完成我想做的事情?也许可以使用相同格式的 PUT 轻松保存更改?什么被认为是最佳实践?
编辑:添加了 HTML 模板代码
<div><h3>{{company.Name}}</h3>
<p>
<div *ngFor="let addy of company.CompanyAddress">
{{addy.Address1}}
</div>
</p>
</div>
我还应该提到我正在使用 Visual Studio Code,它没有显示 CompanyAddress 内的任何属性。
这是 ASP.Net Core 2.1 控制器代码:
[Authorize]
[Route("api/[controller]")]
[ApiController]
public class CompanyController : ControllerBase
{
[HttpGet("{id}")]
public async Task<IActionResult> Company(int id)
{
var company = await _repo.GetCompany(id);
var companyToReturn = _mapper.Map<CompanyForContactDto>(company);
return Ok(companyToReturn);
}
}
根据 Postman 的说法,一切都结束了。
解决方案
在您的服务端和组件端,一切看起来都很好。我认为您遇到了该错误,因为当您导航到(模板)页面时,您试图company
在服务响应之前呈现变量。
我的预测是您没有*ngIf
在模板方面使用子句,
例如,
<div *ngIf="emp1">
Id:{{emp1.id}} Name: {{emp1.name}}
</div>
<div *ngIf="emp2">
Id:{{emp2.id}} Name: {{emp2.name}}
</div>
我明天已经回答了类似的问题,请检查一下。希望能帮助到你。
更新:
请试试这个,
<div *ngIf="company && company.CompanyAddress">
<h3>{{company.Name}}</h3>
<p>
<div *ngFor="let addy of company.CompanyAddress">
{{addy.Address1}}
</div>
</p>
</div>
推荐阅读
- gmail-api - 在 MailApp.sendEmail 中将其他附件 blob 包含到现有邮件附件中
- android - Android:如何制作默认拨号器应用程序?
- virtual-reality - 是否有可探索的虚拟现实场景的术语?
- php - 我正在尝试在 Ultimate Membership Pro 中查找当前登录的用户信息
- node.js - "Object.defineProperty(exports, "__esModule", { value: true });" 在 FunctionFile 中阻止函数执行
- javascript - 如何顺序处理循环中的异步函数
- mysql - 如何在 MySQL SUM 子查询中创建可用的别名
- javascript - React & ASP.NET MVC 5 服务器端渲染 console.log('text') 不显示
- php - 如何让两个 html 表单在一个 .php 文件中工作?
- r - 使用每分钟数据帧计算 12 点到 1 点之间的小时平均值:dplyr