Angular.js 过滤器参数中的插值

Angular.js interpolation in filter parameter

我在 ng-repeat 上有一个过滤器,它接受一个参数。它目前适用于字符串。

<div ng-repeat="(key, value) in searchData | aboutFilter:'abo'">

是否可以使用内插值代替字符串?

<div ng-repeat="(key, value) in searchData | aboutFilter:'{{list.api}}'">

这是我的过滤器:

app.filter('aboutFilter', function() {
return function(items, input) {
    var filtered = [];
    angular.forEach(items, function (value,key) {

      if(key===input){            
        filtered.push(value);
      }
    });
    return filtered;
}
});

完整的模板逻辑如下:

<ul ng-repeat="list in englishList">

  <a ng-class="{{list.title}}Hide" mobile-search-slide href="/about"><li><p>{{list.title}}</p><i class="fa fa-chevron-right"></i></li></a>

  <ul id="hideMe" ng-class="'hide{{list.title}}'">           
  <div ng-cloak ng-repeat="(key, value) in searchData | aboutFilter:'{{list.api}}'">

   <div ng-repeat="result in value" ng-class-odd="'odd'" ng-class-even="'even'">
     <a ng-href="{{value.title}}/{{result.shortname}}">
       <li>
           <p>{{result.title}}</p><i class="fa fa-chevron-right"></i>
       </li>
     </a>
    </div>  

  </div> 
  </li>
  </ul>
</ul> 

如果你想使用一些 ng-model 过滤器,那么你可以只使用 model 名称。无需使用 {{}} 表达式。

在您的情况下,它将是:

 <div ng-cloak ng-repeat="(key, value) in searchData | aboutFilter:list.api">

DEMO

请记住,在您的过滤器中,您使用的是字符串比较。因此过滤器将检查精确匹配。

此外,在您的过滤器中:

您正在比较 keyinput list.api。这里的键永远是 0,1, etc 索引。您必须在那里使用 value 而不是 key