最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

javascript - ngFor inside ngFor - Angular 2 - Stack Overflow

programmeradmin2浏览0评论

how do i iterate over multidimensional array using *ngFor in Angular 2. Below is the DOM Wrapper im using:

<li *ngFor="let menuName of menuNames" routerLinkActive="active" [ngClass]="{'has-submenu':menuName.submenu?.length>0 }">
    <a href="#" [routerLink]="menuName.route" *ngIf="!menuName.enableSM"> <i class="glyphicon {{menuName.icon}}"></i><span class="nav-label">{{menuName.name}}</span> </a>
    <a href="#" *ngIf="menuName.enableSM"> <i class="glyphicon glyphicon-list-alt"></i> <span class="nav-label">Pages</span> </a>
    <ul class="list-unstyled" *ngIf="menuName.enableSM">
        <li *ngFor="let subMenuName of menuNames['submenu'] let idx = index;"> <a [routerLink]="subMenuName.route">404</a> </li>
    </ul>
</li>

And the nested array:

menuNames = [{
    name: "Dashboard",
    route: '/home',
    icon: "glyphicon-th-large",
    submenu: [],
    enableSM: false
}, {
    name: "Pages",
    route: '',
    icon: "glyphicon-list-alt",
    submenu: [{
        name: "404",
        route: '/404.html'
    }, {
        name: "Signin",
        route: '/auth/signin'
    }],
    enableSM: true
}];

The second loop does not render at all.

how do i iterate over multidimensional array using *ngFor in Angular 2. Below is the DOM Wrapper im using:

<li *ngFor="let menuName of menuNames" routerLinkActive="active" [ngClass]="{'has-submenu':menuName.submenu?.length>0 }">
    <a href="#" [routerLink]="menuName.route" *ngIf="!menuName.enableSM"> <i class="glyphicon {{menuName.icon}}"></i><span class="nav-label">{{menuName.name}}</span> </a>
    <a href="#" *ngIf="menuName.enableSM"> <i class="glyphicon glyphicon-list-alt"></i> <span class="nav-label">Pages</span> </a>
    <ul class="list-unstyled" *ngIf="menuName.enableSM">
        <li *ngFor="let subMenuName of menuNames['submenu'] let idx = index;"> <a [routerLink]="subMenuName.route">404</a> </li>
    </ul>
</li>

And the nested array:

menuNames = [{
    name: "Dashboard",
    route: '/home',
    icon: "glyphicon-th-large",
    submenu: [],
    enableSM: false
}, {
    name: "Pages",
    route: '',
    icon: "glyphicon-list-alt",
    submenu: [{
        name: "404",
        route: '/404.html'
    }, {
        name: "Signin",
        route: '/auth/signin'
    }],
    enableSM: true
}];

The second loop does not render at all.

Share Improve this question asked Feb 11, 2017 at 21:46 Fahid MohammadFahid Mohammad 9304 gold badges17 silver badges48 bronze badges 2
  • 3 As a side-note. [ngClass] can be simplified a bit by using [class.name-of-class]="expression" syntax. For more details visit my answer here. – David Walschots Commented Feb 11, 2017 at 21:57
  • You are right, its neat way of handling such cases :) – Fahid Mohammad Commented Feb 13, 2017 at 6:53
Add a ment  | 

1 Answer 1

Reset to default 5

There are some minor issues in your code, typos. Second *ngFor should look like this:

*ngFor="let subMenuName of menuName['submenu']; let idx = index;"

Mind it's menuName not menuNames and there's a semicolon before let idx.

发布评论

评论列表(0)

  1. 暂无评论