我有一个应用程序,我正在开发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
| 归档时间: |
|
| 查看次数: |
12356 次 |
| 最近记录: |