2016-10-03 45 views
0

我有一個對象narrow.searchedMenu帶有3個等長的子數組,我使用ng-repeattrack by $index顯示,因爲有一些重複的元素。

<ul> 
     <li ng-repeat="item in narrow.searchedMenu.description track by $index"> 
     {{ narrow.searchedMenu.name[$index] }}, 
     {{ narrow.searchedMenu.short_name[$index] }}, 
     {{ narrow.searchedMenu.description[$index] }}</li> 
    </ul> 

我需要能夠通過保持只有那些結果,其中一個關鍵字出現在description過濾顯示的結果。如果一個description不匹配我想exlcude nameshort_name以及description

通常我會使用這樣的:

| filter{description:'chicken'} 

追加到ng-repeat語句的結束。但是,它似乎不適用於track by

它給我的控制檯上的錯誤,當我嘗試:

Error: [$parse:syntax] http://errors.angularjs.org/1.5.8/ $parse/syntax?p0=%7B&p1=is%20an%20unexpected%20token&p2=16&p3=NaNndex%20%7C%filter%7Bdescription%3A'chicken'%7D&p4=%7Bdescription%3A'chicken'%7D

我試過其他幾個可能的解決方案,但到目前爲止沒有運氣。

注意,$scope沒有注入到我的控制器,如果我嘗試使用自定義過濾器,我得到了以下錯誤:

"Error: [filter:notarray] errors.angularjs.org/1.5.8/filter/notarray?p0=0";

最後一兩件事 - 我被告知,以避免因爲它includes沒有得到足夠廣泛的支持(有人說polyfill是另一種選擇,但我不確定它是否適用於此?)。

回答

1

您可以爲您在ng-repeattrack by作爲最後一個發言在你的控制器,只要使用連接到對象的自定義過濾器。

在控制器的過濾器應該是這樣的:

menu.chickenFilter = function(item) { 
    return (item.indexOf('chicken') > -1) 
} 

ng-repeat將成爲:

<li ng-repeat="item in narrow.searchedMenu.description | filter: narrow.chickenFilter track by $index"> 
     {{ narrow.searchedMenu.name[$index] }}, 
     {{ narrow.searchedMenu.short_name[$index] }}, 
     {{ narrow.searchedMenu.description[$index] }}</li> 
+0

謝謝。好點子。我想我試過這個,但有一個問題,因爲$範圍沒有注入到我的控制器。讓我試試它很快。更新:好吧,這似乎是問題,它給了我'ReferenceError:$範圍沒有定義'。嗯,我只是試圖注入$範圍到控制器,但它仍然給出了該錯誤。我不確定是否因爲我正在使用承諾和/或使用控制器作爲語法。它是否必須在$範圍內? –

+0

好吧,我把這個過濾器放在另一個對象中,我認爲它現在可以「看到」它,但它給了我另外一個錯誤,我遇到了一些早期的嘗試:「錯誤:[filter:notarray] http://errors.angularjs .org/1.5.8/filter/notarray?p0 = 0「 –

+0

我已經添加了一個工作片段。這應該工作:) – nikjohn

0

轉到與此

<ul> 
    <li ng-repeat="item in narrow.searchedMenu track by $index" ng-if="narrow.searchedMenu[$index].description.indexOf('chicken')>-1"> 
    {{ narrow.searchedMenu.name[$index] }}, 
    {{ narrow.searchedMenu.short_name[$index] }}, 
    {{ narrow.searchedMenu.description[$index] }}</li> 
</ul> 

我已經在這裏創造一個plunker

http://plnkr.co/edit/KXvD4JgwRe9wNszt8rCy?p=preview

+0

看起來很有前途!我得到這個控制檯錯誤tho'錯誤:[$ parse:syntax] http://errors.angularjs.org/1.5.8/$parse/syntax?p0=-&p1=is%20an%20unexpected%20token&p2=12&p3=NaNndex %20%7C%20ng-if%3D&p4 = -if%3D' –

+0

你可以檢查plunkr工作正常,這是一個乾淨的解決方案。你需要調試你的代碼,我認爲會有一些愚蠢的錯誤 – selftaught91

+0

你的plnkr和我的問題有些不同。當我讓你的plnkr像問題中的代碼一樣無效時。 http://plnkr.co/edit/xBE21b0yhhgI6mhFz3wL?p=preview即使您的原始plunkr中的解決方案也不符合我所描述的期望結果... –