ngFor循环中的样式

Igo*_*lić 9 angular

我有一个应用程序,我正在开发Angular 2(RC1).需要从数据库创建菜单.数据以JSON格式通过Web Api提供.我想以递归方式从数据构建菜单,以确保菜单的深度不是问题.

问题是当我想在ngFor循环的特定行上添加类时,该类被添加到所有行而不是我想要的那一行.

代码看起来像这样:

sidenav.component.ts

import { Component, Input } from '@angular/core';
import { IMenu } from '../../../shared/models/menu.interface';
import { MenuComponent } from './menu.component';

@Component({
    moduleId: module.id,
    selector: 'sidenav',
    templateUrl: 'sidenav.component.html',
    directives: [MenuComponent]
})
export class SidenavComponent {
    @Input() menu: IMeni[]
}
Run Code Online (Sandbox Code Playgroud)

sidenav.component.html

...
<menu-view [menu]="menu"></menu-view>
...
Run Code Online (Sandbox Code Playgroud)

menu.component.ts

import { Component, Input } from '@angular/core';
import { IMenu } from '../../../shared/models/menu.interface';
@Component({
    moduleId: module.id,
    selector: 'menu-view',
    templateUrl: 'menu.component.html',
    directives: [MenuComponent]
})
export class MenuComponent {
    isSelected: boolean = false;
    @Input() meni: IMeni[];

    onSelect(): void {
        this.isSelected = !this.isSelected;
    }
}
Run Code Online (Sandbox Code Playgroud)

menu.component.html

<ul>
     <li  *ngFor="let item of menu; let frst=first"
           class="menu-list" 
           [ngClass]="{'active': 'isSelected', 'active': 'frst'}">

        <a [routerLink]="[item.uri]" (click)="onSelect()" > {{item.name}}</a>

        <meni-view [menu]="item.children"></meni-view>

     </li>
</ul>
Run Code Online (Sandbox Code Playgroud)

因此,当我点击父母时,所有父母都变得活跃,不仅仅是那个特定的父母,这将是令人满意的行为.我做错了什么?

zla*_*ace 14

看起来您的变量isSelected在列表中共享.更改变量以跟踪索引.

export class App {
    menu = [{name: "Item 1", url: "/item1"}, {name: "Item 2", url: "/item2"},{name: "Item 3", url: "/item3"}];
    selectedIdx = 0;

    selectItem(index):void {
        this.selectedIdx = index;
    }
}
Run Code Online (Sandbox Code Playgroud)

渲染它

<li  *ngFor="let item of menu;let i = index"
   class="menu-list" [ngClass]="{'active': selectedIdx == i}">
   <a (click)="selectItem(i)"> {{item.name}}</a>
</li>
Run Code Online (Sandbox Code Playgroud)

工作 http://plnkr.co/edit/7aDLNnhS8MQ1mJVfhGRR