2017-07-28 37 views
0

我有搜索功能的動態導航條上的頂部過濾器上,搜索上陣角2

Component.html

<input type="text" class="form-control" placeholder="Navigation search..." [(ngModel)]="searchString"> 
<li class="nav-item " *ngFor="let dir of directories"> 
    <a href="javascript:;" class="nav-link nav-toggle"> 
     <i class="fa fa-clock-o"></i> 
     <span class="title">{{ dir.name }}</span> 
     <span class="arrow"></span> 
    </a> 
    <ul class="sub-menu" *ngFor="let file of dir.child"> 
     <li class="nav-item "> 
      <a href="#" class="nav-link "> 
       <span class="title">{{file.name}}</span> 
      </a> 
     </li> 
     <navigation-bar [directories]="dir.child"></navigation-bar> 
    </ul> 
</li> 

Component.ts

import { Component, Input } from '@angular/core'; 
@Component({ 
    selector: 'navigation-bar', 
    templateUrl: './app/home/navigationBar.component.html',  
}) 

export class NavigationBarComponent { 
    @Input() directories: Array<Tree>;  
} 

export class Tree{ 
    directories: any; 
    constructor() 
    { 
     this.directories = [ 
     { 
      name: 'parent1', 
      child: [{ 
       name: 'child1', 
       child: [] 
      }, 
      { 
       name: 'child2', 
       child: [] 
      }] 
     }, 
     { 
      name: 'parent2', 
      child: { 
       name: 'child1', 
       child: [] 
      } 
     }, 
     { 
      name: 'parent2', 
      child: [{ 
       name: 'child1', 
       child: [] 
      }, 
      { 
       name: 'child2', 
       child: [] 
      }] 
     }]; 
    }  
} 

現在我想使用文本框中輸入的搜索字符串搜索導航欄。

是否有任何方法來實現上述功能的每個字符輸入文本框中。它應該過濾JSON對象

+0

可以創建一個相同的plunker,你可以很容易地acheive上搜索這個使用KEYUP和使用事件的發射器,但一個plunker將證明這一點正確 –

+0

它有這麼多的依賴關係,我已經在Asp.net Core –

+0

父名稱或子名稱屬性中實現了Angular 2? – Sreemat

回答

3

的name屬性在您的輸入字段:

<input (keyup)="applyFilter($event.target.value);"> 

在您的組件:

applyFilter(filter: String) { 
    this.filteredArray = this.directories.filter(item => { 
      if (item.name.toString().toLowerCase().indexOf(filter.toLowerCase()) !== -1) { 
      return true; 
      } 
     return false; 
    } 
    ); 
} 

filteredArray是含有符合篩選條件的項目的陣列。

+1

作品像魅力,非常感謝:) –

1

你可以創建一個自定義管道來做到這一點,好處是你可以通過那些需要搜索的關鍵字。您可以根據需要更新以下代碼。例如

<li *ngFor="let n of list | FilterPipe: queryString : searchableList "> 
     {{n.name}} ({{n.age}}) 
</li> 

this.searchableList = ['name','age'] 

@Pipe({ 
    name: 'FilterPipe', 
}) 
export class FilterPipe implements PipeTransform { 
    transform(value: any, input: string,searchableList : any) { 
     if (input) { 
      input = input.toLowerCase(); 
      return value.filter(function (el: any) { 
       var isTrue = false; 
       for(var k in searchableList){ 
        if(el[searchableList[k]].toLowerCase().indexOf(input) > -1){ 
        isTrue = true; 
        } 
        if(isTrue){ 
        return el 
        } 
       } 

      }) 
     } 
     return value; 
    } 
} 

More info