【问题标题】:*NgFor over custom JSON categories file not rendering*NgFor 自定义 JSON 类别文件不呈现
【发布时间】:2020-09-06 22:55:07
【问题描述】:

我的资产有这个简单的结构:

[
  {
    "categories": [
      {
        "name":  "Fruits"
          },
          {
            "name": "vegetables"
          },
        {
          "name": "Meat"
        }
    ]
  }
]

我的数据服务(带有两个 JSONS 调用):

getCategories() {
    return this.http.get<any>('./assets/categories.json')
  }

getProducts() {
    return this.http.get<any>('./assets/products.json')

  }

首页 TS(已编辑)

 ngOnInit(): void {
this.dataService.getCategories().subscribe(data=>{
  this.categories=data[0]['categories'] -> this works!!
  console.log(data)

}) 
this.dataService.getProducts().subscribe(data=>{
  this.products=data[0]['products']
  console.log(data)

})

}

主页 HTML:(已编辑)

<div class="col-md-4" >
            <div class="list-group" style="color:black">
                <a 
                *ngFor="let c of categories"
                routerLink='/home'
                [queryParams]="{categories:c.name}"
                class="list-group-item list-group-item-action"
                [class.active]='categories===c.name'>
                    {{c.name}}
                </a>
            </div>
        </div>
        <div class="col-md-8" >
            <ul class="list-group" *ngFor="let p of products">
                <li class="list-group-item">
                    {{p.name}}
                </li>
            </ul>
        </div>

日志很好,但产品 JSNON 并没有像类别那样显示。不知何故,我无法显示类别并继续该项目。 JSON 格式是否错误?我叫错了吗?谁能给我个提示好吗?

编辑(@Michael D):尽管类别 JSON 问题已解决,但我提出了另一个问题,但他的第二个 JSON 具有相同的结构!我只是不明白我错过了什么。在这里

第二个 JSON:

[
    {
    "products:": [
        {
            "id": "1",
            "name": "Apple",
            "price": "free",
            "category": "Fruits"
        },



        {
            "id": "5",
            "name": "Grass",
            "price": "Free",
            "category": "Vegetabes"
        },
        {
            "id": "6",
            "price": "Free",
            "category": "Vegetabes"
        }
    ]
}
]

两个日志的快照:

【问题讨论】:

  • 不知何故这是一个初级问题,但我被困住了......

标签: arrays json angular http


【解决方案1】:

categories.json 不直接包含对象,而是包含一个数组,该数组具有父级属性categories 的一个元素。试试下面的

this.dataService.getCategories().subscribe(
  data => {
    this.categories = data[0]['categories'];
    console.log(data);
  }
);

更新:forkJoin 合并可观察对象

如果你要同时订阅多个 observable,你可以使用 RxJS forkJoin 来组合它们。我怀疑这会解决 products 对象的问题,但它更优雅,不会影响机会。

import { forkJoin } from 'rxjs';

ngOnInit() {
  forkJoin({
    categories: this.dataService.getCategories(),
    products: this.dataService.getProducts(),
  })
  .subscribe(
    response => {
      // handle reponse
      this.categories = response.categories[0]['categories'];
      this.products = response.products[0]['products'];
    },
    error => { // handle error }
  );
}

更新:products.json 问题

products.json 文件中似乎存在潜在的拼写错误。密钥是products:。实际上它会是products

【讨论】:

  • 我对另一个 JSON 有完全相同的问题。这没有任何意义,因为结构是相同的,我应用了与您建议的相同的响应!
  • 请在问题中发布 JSON。
  • 我会为你编辑 som
  • 我不明白为什么它不起作用。您是否收到任何错误消息或数据未显示?
  • 请查看控制台日志中的数据结构。此外,也许您可​​能需要将 *ngFor 指令从 &lt;ul&gt; 标记移动到 &lt;li&gt; 标记。
猜你喜欢
  • 2018-09-18
  • 1970-01-01
  • 2013-07-26
  • 2020-12-20
  • 2011-11-24
  • 1970-01-01
  • 2020-03-08
  • 2021-10-25
  • 2016-06-14
相关资源
最近更新 更多