Mam aplikację, którą rozwijam w Angular 2 (RC1). Menu należy utworzyć z bazy danych. Dane są dostarczane za pośrednictwem Web Api w formularzu JSON. Chciałbym zbudować menu z danych rekurencyjnie, aby mieć pewność, że głębia menu nie jest problemem.Styl w pętli ngFor
Problem polega na tym, że chcę dodać klasę do określonego wiersza pętli ngFor, a klasa zostanie dodana do wszystkich wierszy, a nie tylko do jednego.
Kod szuka coś takiego:
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[]
}
sidenav.component.html
...
<menu-view [menu]="menu"></menu-view>
...
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;
}
}
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>
Więc, gdy klikam na rodzica wszyscy rodzice stają się aktywne, nie tylko, że zwłaszcza jeden, co będzie satysfakcjonujące zachowanie. Co robię źle?
Co masz na myśli przez „kliknięcie na rodzica wszystkich rodziców stać aktywny"? Czy powinno to być "kliknij na rodzica wszystkie" MenuComponent "stają się aktywne"? –
Po zbudowaniu menu daje hierarchię elementów nadrzędnych i podrzędnych. Załóżmy, że model dla menu to: 'id: number; parentId: number; name: string; dzieci: IMenu []; '. Kiedy klikam na instancję nadrzędną elementu menu, otwieram wszystkie wystąpienia menu nadrzędnego. Wymagane zachowanie powinno polegać na tym, że gdy kliknę na instancję nadrzędną, otworzy się lub powiesz, aby podać poprawną klasę tylko do blokowania z dziećmi wybranego rodzica. –