You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Angular 4/5中如何使用*ngFor循环嵌套JSON数据?

解决Angular中嵌套JSON数据的列表循环问题

嘿,我来帮你搞定这个嵌套循环的实现!先提个关键的小问题——你定义的CATEGORIES数组里有个语法错误:Clothing项的subcategory值写成了'jeans}',多了个多余的闭合大括号,得先修正这个,不然会导致数据解析失败。

第一步:修正数据与基础定义

先把你的数据、模型和服务代码调整成正确的格式:

// 先新建category.model.ts定义Category接口(如果还没有的话)
export interface Category {
  id: number;
  categoryName: string;
  subcatName: { subcategory: string }[];
}

// 修正后的分类数据
export const CATEGORIES: Category[] = [ 
  { id: 1, categoryName:'Accessories', subcatName: [ {subcategory: 'belts'} ] }, 
  { id: 2, categoryName:'Clothing', subcatName: [ {subcategory: 'jeans'} ] }, 
]; 

// 服务代码保持不变,逻辑是没问题的
@Injectable() 
export class CategoriesService { 
  constructor() { } 
  getCategories(): Category[]{ return CATEGORIES; } 
} 

第二步:在组件中注入服务获取数据

在你要渲染列表的组件里,注入CategoriesService,并在初始化阶段获取分类数据:

import { Component, OnInit } from '@angular/core';
import { CategoriesService } from './categories.service';
import { Category } from './category.model';

@Component({
  selector: 'app-category-list',
  templateUrl: './category-list.component.html'
})
export class CategoryListComponent implements OnInit {
  // 用来存储分类列表的变量
  categoryList: Category[] = [];

  constructor(private categoriesService: CategoriesService) { }

  ngOnInit(): void {
    // 从服务拉取分类数据
    this.categoryList = this.categoriesService.getCategories();
  }
}

第三步:模板中实现嵌套循环

在组件的HTML模板里,用两层*ngFor实现嵌套列表,外层遍历主分类,内层遍历对应子分类,同时加个判断避免空数据渲染异常:

<ul>
  <!-- 外层循环:遍历所有主分类 -->
  <li *ngFor="let cat of categoryList">
    <!-- 显示主分类名称 -->
    <strong>{{ cat.categoryName }}</strong>
    <!-- 内层循环:遍历当前主分类的子分类,先判断是否有子分类再渲染 -->
    <ul *ngIf="cat.subcatName && cat.subcatName.length > 0">
      <li *ngFor="let subcat of cat.subcatName">
        {{ subcat.subcategory }}
      </li>
    </ul>
  </li>
</ul>

最后补全模块配置

确保你的Angular模块中声明了组件并提供了服务:

import { NgModule } from '@angular/core';
import { BrowserModule } from '@angular/platform-browser';
import { CategoryListComponent } from './category-list.component';
import { CategoriesService } from './categories.service';

@NgModule({
  declarations: [CategoryListComponent],
  imports: [BrowserModule],
  providers: [CategoriesService],
  bootstrap: [CategoryListComponent]
})
export class AppModule { }

这样运行起来,页面就会正确渲染出主分类和对应的子分类嵌套列表啦!

内容的提问来源于stack exchange,提问作者Akshay

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 09:31:06