2014-06-27 50 views
0

我需要創建一個文本框,使用角度來搜索JavaScript數組(使用對象)。它必須是嚴格的,並且只有在它完全匹配後才返回結果(因此與默認過濾器不同,如果沒有文本應該返回)。我在這裏找到了一個自定義的過濾器(謝謝你們),那樣做了我想要的一個例外:我不能將我的輸入ng模型傳遞給它。使用默認的角度濾波器,我能夠通過NG-模型到這樣的:傳遞模型到自定義過濾器

<input type="text" ng-model="searchID">

<div ng-repeat="additive in additives | filter:searchID">

但是,當我試圖用我的exactMatch過濾器做到這一點

app.filter('exactMatch', function() { 
    return function(additives, pattern) { 
     var result = []; 
     console.log(pattern); 
     additives.forEach(function (additive) { 
      if(pattern != "") { 
       console.log(pattern); 
       if (additive.Number == pattern) { 
        result.push(additive); 
       } 
      } 
     }); 
     return result; 
    } 
}); 

它拒絕合作,並且console.log(pattern)返回未定義。

我也意識到ng-repeat可能不是最好的方法來做到這一點,因爲我只是返回最大1個對象。

+0

作品對我來說,http://jsfiddle.net/xH7NL/ – Mosho

+0

,我不得不刪除'.Number'得到Mosho的小提琴在Chrome中工作:http://jsfiddle.net/u2v3d/ –

回答

-1

您可以嘗試完全移除過濾器,只顯示/隱藏元素(如果它們相同)。

標記:

<div ng-app="app" ng-controller="mainCtrl"> 
    <input type="text" ng-model="search.searchId"> 
    <div ng-repeat="additive in data.additives"> 
     <span ng-show="actions.showIfEqual(additive);">{{additive}}</span> 
    </div> 
</div> 

控制器邏輯:

app.controller('mainCtrl', function($scope) { 
    $scope.data = { 
     additives: ['a','b', 'c', 'd'] 
    } 
    $scope.search = { 
     searchId: '' 
    }; 

    $scope.actions = { 
     showIfEqual: function (additive) { 
      console.log(additive === $scope.search.searchId); 
      return additive === $scope.search.searchId; 
     } 
    }; 
}); 
相關問題