【问题标题】:How to get a nested array into rowData如何将嵌套数组放入rowData
【发布时间】:2018-04-09 12:08:55
【问题描述】:

我是 Angular 和 JS 的新手,所以请保持温和。我有一个 Angular 5 服务,它可以获取如下结构的 JSON:

result: {
 objects: [
 {object1},
 {object2}.....

然后将 JSON 作为对象存储在我的 grid-component.ts 中的一个变量中:

getVehicles() {
this._vehicleService.getVehicles().subscribe(
  data => { this.vehicles = data },
  err => console.error(err),
  () => console.log('done loading vehicles')
);

我正在尝试将结果的数组部分 objects[] 放入 rowData,但没有任何运气。我尝试了几种方法;遍历对象并推送到 rowData。

for (let vehicle of this.vehicles.result.objects) {
   this.gridOptions.rowData.push(vehicle);

只是将 objects[] 分配给 rowData 但似乎没有任何效果。问题似乎出在我的表情上;

this.vehicles.result.objects;

过去车辆 Angular 所说的一切都是未定义的。奇怪的是,如果我在模板中使用字符串插值,我可以使用 *ngFor 创建一个列表 if vehicleIds 使用相同的表达式,尽管控制台仍然抱怨未定义的属性;

<ul>
<li *ngFor="let vehicle of vehicles.result.objects">
  {{ vehicle.vehicleId }}
</li>

显然,我在这里缺少一些基本的东西。任何建议将不胜感激。

【问题讨论】:

  • 你可以试试console.log(this.vehicles.result.object) 吗?
  • 那是我的第一个调试策略。这是控制台错误:ERROR TypeError: Cannot read property 'object' of undefined at SafeSubscriber.eval [as _complete] (my-grid-application.component.ts:69)
  • this.vehicles.result.object 应该是 this.vehicles.result.objects;
  • 抱歉,这是我帖子中的错字。我在我的代码中做对了。已在帖子中修复
  • 请分享console.log(this.vehicles)的结果

标签: javascript angular typescript ag-grid


【解决方案1】:

问题在于您的 vehicles 对象,最初在渲染组件时未定义它。添加? 来解决这个问题。

<ul>
<li *ngFor="let vehicle of vehicles?.result.objects">
  {{ vehicle.vehicleId }}
</li>

使用async 管道解决此问题的其他可能方式。你可以找到与async管道here相关的文档

【讨论】:

  • 谢谢!我可以通过在模板中设置 rowData 来解决我的问题,如下所示: [rowData]="vehicles?.result.objects"> 这完成了我所需要的,但我仍然不明白为什么我不能在我的 TS 中设置 rowData ?
  • 您的行数据定义为 rowData:any[]=[]?在进行推送之前,您必须将数组初始化为空数组
猜你喜欢
  • 2018-08-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-26
  • 2013-02-04
  • 1970-01-01
  • 1970-01-01
  • 2018-09-20
相关资源
最近更新 更多