2017-10-18 2 views
0

Ich habe ein Hamburger-Menü erstellt und es gibt Toggle-Funktion für die Anzeige von Unterkategorien diese Toggle-Funktion funktioniert gut, bis ich Filter auf sie anwenden. Nach dem Durchsuchen einer Kategorie durch Filter Toggle-Funktion funktioniert nicht.Angular 2 Filter und Toggle-Funktion nicht wie erwartet funktioniert

das ist mein HTML-Code

<ul class="nav navbar-nav"> 
<div id="menuToggle" class="sidenav"> 
<ul id="menu"> 
    <li> 
    <input class="form-control" type="search" [(ngModel)]="txtToSearch" placeholder="Search"/> 
    </li> 
    <li *ngFor="let category of (componentContents.dashboardMenu | dashboardFilter : txtToSearch); let i = index" > 
    <p class="toggleMenu" (click)="toggleMenu(i,componentContents.dashboardMenu)">{{category.category}} 
    </p> 

    <div *ngIf="category.show"> 
     <ul id="{{(category.category).split(' ').join('-')}}" *ngIf="category.subCategory.length > 0"> 
     <li *ngFor="let subCat of category.subCategory"> 
      <a routerLink={{subCat.router}} routerLinkActive="active">    
      <span class="glyphicon glyphicon-bell" ></span>{{subCat.subcategory}} </a></li> 
     </ul> 
    </div> 
    <hr /> 
    </li> 
</ul> 

in component.ts diesen Code im mit für Umschaltfunktion

toggleMenu(index, catArry) { 
if (catArry[this.prevClicked] && this.prevClicked !== index) { 
    catArry[this.prevClicked].show = false; 
} 
catArry[index].show = !catArry[index].show; 
this.prevClicked = index; 
} 
+0

Die Indexänderungen im Hinblick berechnen, wenn der Filter angewendet wird und der Index mit der Modellsammlung nicht ich denke, passen – learner

Antwort

2

Die index Variable gilt nur für das aktuelle Ergebnis. Wenn der Filter angewendet wird, ändert sich das Ergebnis und der Index entspricht nicht der tatsächlichen Position des Elements im Array.

Sie die Kategorie sich der toggleMenu(category, catArray) Funktion anstelle von Index passieren können und den Index in toggleMenu Funktion catArray.indexOf(category)

+0

Danke, ich habe versucht, aber bekam Fehler kann nicht lesen Property Show von undefined – user1881845

+0

Können Sie bitte Ihren aktualisierten Code hier einfügen oder einen Plünderer daraus erstellen? – learner

+0

toggleMenu (Kategorie, catArry) { let index = catArry.indexOf (Kategorie); console.log ("Indexwert" + Index); if (catArry [this.prevClicked] && this.prevClicked! == Index) { catArry [this.prevClicked] .show = false; } catArry [Index] .show =! CatArry [Index] .show; this.prevClicked = Index; } – user1881845

Verwandte Themen