我有一个对象narrow.searchedMenu
,其中包含3个等长子数组,我使用ng-repeat
和track 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
不匹配,我想要排除name
和short_name
以及description
。
通常我会使用这样的东西:
| filter{description:'chicken'}
附加到ng-repeat
语句的末尾。但是,它似乎不适用于track by
。
我在尝试时在控制台上给出了这个错误:
错误:[$ parse:syntax] http://errors.angularjs.org/1.5.8/ $解析/语法P0 =%7B&安培; P1 =是%20AN%20unexpected%20token&安培; P2 = 16&安培; P3 = NaNndex%20%7C%滤波器%7Bdescription%3A'chicken'%7D&安培; P4 = %7Bdescription%3A'chicken'%7D
我已经尝试了其他几种可能的解决方案,但到目前为止还没有运气。
请注意,$scope
未注入我的控制器,如果我尝试使用自定义过滤器,则会收到以下错误:
“错误:[filter:notarray] errors.angularjs.org/1.5.8/filter/notarray?p0=0" ;
最后一件事 - 我被告知要避免使用includes
,因为它没有得到足够广泛的支持(有人说polyfill
是替代品,但我不确定它是否适用对此?)。
答案 0 :(得分:1)
您可以使用附加到控制器中对象的自定义过滤器,只要您将public struct MultivalueEntry<T> {
public var value : T
public var label : String?
public let id : Int
public init(value: T, label: String?, id: Int) {
self.value = value
self.label = label
self.id = id
}
}
作为track by
中的最后一个语句。
控制器中的过滤器如下所示:
ng-repeat
menu.chickenFilter = function(item) {
return (item.indexOf('chicken') > -1)
}
将成为:
ng-repeat
答案 1 :(得分: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