2016-02-19 118 views
2

我想过滤结果ng-repeat,但具有“智能搜索”功能,即。使用多个关键字进行搜索。该集合是一个复杂的对象数组,包含对象。AngularJS过滤器:智能搜索

根据Angular Docs: $filter,你可以使用{$: "keyword"}与过滤功能deepfilter,但我还没有得到它的工作。

段:

.filter('smartsearch', function() { 
    return function (collection, keywords) { 
    if (!keywords) { 
     return collection; 
    } else { 
     keywords = keywords.split(" "); 
     _.each(keywords, function (word) { 
      collection = _.filter(collection, {$: word}); 
     }); 
     return collection; 
    } 
} 

它似乎返回一个空数组([])每一次,尽管我知道我使用的是匹配的关键字

UPDATE

得到它的工作感谢@gravityplanx指出我在正确的方向,下面是工作解决方案:

.filter('smartsearch', ['$filter', function ($filter) { 
     return function (collection, keywords) { 
      if (!keywords) { 
       return collection; 
      } else { 
       keywords = keywords.split(" "); 
       $.each(keywords, function (k, v) { 
        collection = $filter('filter')(collection, {$: v}); 
       }); 
       return collection; 
      } 
     } 
    }]); 

回答

3

当您想要使用Angular时,您正在使用下划线过滤器方法。

只需将_.filter(更改为$filter(即可。

+0

获取'$ filter is not defined' now –

+0

[this](http://stackoverflow.com/questions/16706583/angularjs-filter-is-undefined-when-trying-to-get-filtered-data)is可能的罪魁祸首,但诊断一个'未定义'错误而无法访问代码库是徒劳无益的。 – gravityplanx

+1

是的,的确,这是问题所在,你的回答引发了我的问题以及如何纠正它,我将编辑我的OP并将工作代码放在那里。感谢您的帮助 –