2016-02-19 109 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並將工作代碼放在那裏。感謝您的幫助 –