我一直在通過Raynda Villalobos上的Lynda.com(https://github.com/planetoftheweb/learnangular)這個GitHub回購實驗 - 它的功能類似於我希望構建的基本Web應用程序,但我最近打了一下的路障。Angular 2:按嵌套數組中的值進行過濾?
在這回購上面鏈接,在應用程序/ component.app.ts,是以下的數組:
var ARTISTS: Artist[] = [
{
"name": "Barot Bellingham",
"shortname": "Barot_Bellingham",
"reknown": "Royal Academy of Painting and Sculpture",
"bio": "Some bio here."
},
// etc...
]
此陣列由管過濾,如應用程序/ pipe.search.ts看出:
export class SearchPipe implements PipeTransform {
transform(pipeData, pipeModifier) {
return pipeData.filter((eachItem) => {
return eachItem['name'].toLowerCase().includes(pipeModifier.toLowerCase()) ||
eachItem['reknown'].toLowerCase().includes(pipeModifier.toLowerCase());
});
}
}
這裏的濾波器輸入:
<input class="search-input" [(ngModel)]="field1Filter" placeholder="type in search term here" (click)="showArtist(item); field1Filter=''">
而且代碼過濾結果:
<ul class="artistlist cf" *ngIf="field1Filter">
<li class="artistlist-item cf"
(click)="showArtist(item);"
*ngFor="let item of (artists | search: field1Filter)">
<artist-item class="content" [artist]=item></artist-item>
</li>
</ul>
<artist-details *ngIf="currentArtist" [artist]="currentArtist"></artist-details>
這一切都完美的作品,但是,在我的項目,我需要包括三個嵌套的數組,並有基於這些陣列過濾的值的能力。我需要看起來像這樣的類型的數組的一個示例:
var ARTISTS: Artist[] = [
{
"name": "Barot Bellingham",
"shortname": "Barot_Bellingham",
"reknown": "Royal Academy of Painting and Sculpture",
"bio": "Some bio here...",
"friends": [
"James",
"Harry",
"Bob",
"Liz",
"Kate",
"Jesse"
],
"emails": [
"[email protected]",
"[email protected]"
],
"car": [
"honda",
"scion",
"aston martin"
]
},
// etc...
]
因此,我希望能在「哈利」,以及包含「哈利」僅顯示對象在任何過濾「名」,「名望,「朋友」,「電子郵件」或「汽車」。這是可能的,如果是這樣,我如何編輯管道過濾器來做到這一點?謝謝!!
(我敢綠色在一般的角度和JS,所以我想,如果我使用了不正確的術語或忽略/誤解基本的東西提前道歉。)
非常感謝您的持續幫助和解釋,DeborahK! 我會在一天左右的時間內製造一名運動員。但是,我已經使用了您的修改後的代碼,但它阻止了應用程序的加載,而我無法弄清楚爲什麼(控制檯說意外的分號)。請參閱[控制檯錯誤截圖(imgur.com](http://imgur.com/a/l4p87)。當我使用我的問題中提供的過濾器時,不會觸發這個功能。再次感謝! – Boosman
是否顯示其他錯誤?這是一個副作用,而不是實際的錯誤 – DeborahK
不,這是控制檯中顯示的唯一錯誤,它阻止了應用程序的加載。「正在顯示,這就是我的' '標記裏面的內容 –
Boosman