2017-10-18 58 views
0

我创建了一个汉堡菜单,并且有显示子类别的切换功能,这个切换功能正常工作,直到我对它们应用过滤器。通过过滤器切换功能不能正常工作搜索某个类别后Angular 2过滤器和切换功能不能按预期工作

这是我的html代码

<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> 

在component.ts即时通讯使用此代码切换功能

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

鉴于该指数的变化计算toggleMenu函数索引 – learner

回答

2

index变量仅适用于当前的结果。所以当应用过滤器时,结果会发生变化,并且索引不会与数组中元素的实际位置相对应。

您可以通过类别本身到toggleMenu(category, catArray)函数,而不是指数,当施加滤波器和指数不与模型收集我猜符合使用catArray.indexOf(category)

+0

谢谢,我尝试过,但得到错误无法读取属性显示的未定义 – user1881845

+0

你能否在这里粘贴你的更新代码或创建一个plunker出来? – learner

+0

toggleMenu(category,catArry){index} = catArry.indexOf(category); console.log(“Index Value”+ index); (catArry [this.prevClicked] && this.prevClicked!== index){ catArry [this.prevClicked] .show = false; } catArry [index] .show =!catArry [index] .show; this.prevClicked = index; } – user1881845