2016-03-14 174 views
3

在過去的幾天裏,我用Angular過濾了一個數組數組並且顯示它有困難。我試過尋找類似的帖子,但我找不到解決方案。陣列的角度濾波器陣列

比如我的數據的外觀:

$scope.answers = [ 
    {title: "Qestion1", keywords: ["dino", "dog", "cat"]}, 
    {title: "Quessstion2", keywords: ["cat", "dog"]} 
]; 

目前我顯示列表:

<div class="solution-box" ng-repeat="answer in pagedItems[currentPage]"> 

我有兩個搜索字段:

<input type="text" ng-model="title" ng-change="search1()" class="form-control" placeholder="Filter by title"> 
<input type="text" ng-model="keys" ng-change="search2()" class="form-control" placeholder="Filter by keywords"> 

搜索1()函數,它只是正常工作:

不改變filteredItems

$scope.search2 = function() { 
     $scope.filteredItems = $filter('filter')($scope.answers, function (answer) { 
      return $filter('filter')(answer.keywords, function (keyword) { 
       if (searchMatch(keyword, $scope.keys)) { 
        console.log($scope.filteredItems + '/' + keyword + '|' + $scope.keys); 
        return true; 
       } 
       return false; 
      }); 
     }); 
     $scope.currentPage = 0; 
     // now group by pages 
     $scope.groupToPages(); 
    }; 

任何人都可以請給小費什麼可以在搜索2()函數是錯誤

搜索2()函數? 雖然我正在記錄filteredItems,但它會記錄正確數量的答案,但該列表仍然保持與原來相同的大小。 我在這裏失蹤的自定義過濾器的主要邏輯是什麼?

感謝,

+1

我建議做一個jsfiddle/plunker。 – jusopi

+1

'$ filter('filter')'會返回你傳給它的函數返回一個真值。使用'search2',你返回另一個'$ filter('filter')'的結果,這可能是一個數組,因此不會進行過濾。你期望內部過濾器在那裏做什麼? – mgilson

+0

我認爲$ filter('filter')在數組的一個級別上工作,所以對於內部過濾器,我想過濾關鍵字,然後用過濾的關鍵字過濾答案。這個想法是通過過濾標題和關鍵字來顯示列表。 –

回答

0

由於@mgilson指出,需要從過濾器回調函數返回一個布爾值,但你返回一個數組,這將永遠是truthy。這裏也沒有必要使用$filter('filter')。你可以這樣做:

$scope.filteredItems = $scope.answers.filter(function(answer) { 
    var matches = answer.keywords.filter(function() { 
     return searchMatch(keyword, $scope.keys); 
    }); 
    return matches.length > 0; 
}); 
+0

非常感謝! –