簡體   English   中英

通過ng-repeat語句中的子數組過濾對象,該語句使用$ index跟蹤來處理重復

[英]Filter object by child array in ng-repeat statement that uses track by $index to handle dupes

我有一個對象帶有3個等長子數組的narrow.searchedMenu ,我用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

嘗試時,它會在控制台上顯示此錯誤:

錯誤:[$ 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未注入到控制器中,如果嘗試使用自定義過濾器,則會出現以下錯誤:

“錯誤:[filter:notarray] errors.angularjs.org/1.5.8/filter/notarray?p0=0”;

最后一件事-我被告知要避免includes它,因為它沒有得到足夠的支持(有人說過polyfill是替代方法,但是我不確定它是否適用於此?)。

您可以使用附加到控制器中對象上的自定義過濾器, 只要您按照ng-repeat 的最后一條語句進行track 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>

一起去

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

我在這里制造了一個矮人

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM