2014-04-07 34 views
0

基本上我想過濾到列表中的多個值。 我有一個名爲items的過濾器列表,它表示下面列表中列表項的值。如果用戶點擊鏈接一,它將只列出具有1作爲值的列表項,點擊兩列出值爲2等的列表項。AngularJS在過濾器中的邏輯表達式?

主要問題來自一個叫做OneTwo的鏈接,它應該列出值爲1或2的列表項,但我根本無法使其工作。我試圖用dot來包含多個值,但我無法使其工作。在這個例子中,我將OneTwo的值設置爲'0',但它應該是('1'。'2')。 代碼和下面的jsfiddle例如:

HTML:

<div ng-controller="FilterListController"> 
    <ul> 
     <li ng-repeat="item in items"> 
      <a ng-click="select(item)" ng-class="{active: item == selected}">{{item.name}}</a> 
     </li> 
    </ul> 
    <ul> 
     <li ng-repeat="listitem in list | filter:{value: selected.value}"> 
      {{listitem.name}} - {{listitem.value}} 
     </li> 
    </ul> 
</div> 

JS:

var myApp = angular.module('myApp',[]); 

function FilterListController($scope) { 
    $scope.list = [ 
     {name: 'a', value: '1'}, 
     {name: 'b', value: '2'}, 
     {name: 'c', value: '3'}]; 

    $scope.items = [{name: 'OneTwo', value: '0'},{name: 'One', value: '1'},{name: 'Two', value: '2'},{name: 'Three', value: '3'}]; 

    $scope.selected = $scope.items[0]; 
    $scope.select = function(item){ 
     $scope.selected = item; 
    } 
} 

JSFiddle例子。

回答

1

你應該從控制器使用自定義過濾器,然後顯示列表,

var myApp = angular.module('myApp',[]); 

function FilterListController($scope, $filter) { 
    $scope.list = [ 
     {name: 'a', value: '1'}, 
     {name: 'b', value: '2'}, 
     {name: 'c', value: '3'}]; 

    $scope.items = [{name: 'OneTwo', value: '12'},{name: 'One', value: '1'},{name: 'Two', value: '2'},{name: 'Three', value: '3'}]; 

    $scope.selected = $scope.items[0]; 
    $scope.select = function(item){ 
     $scope.selected = item; 

     $scope.resultList = $filter('filterMyList')($scope.list, item); 

    } 
} 

myApp.filter('filterMyList', function() { 
    return function(list, val) { 
     var newList = []; 
     for (var i in list) { 
      if(val.value.indexOf(list[i].value) !== -1) { 
       newList.push(list[i]); 
      } 
     } 

     return newList; 

    } 
}) 

更新的jsfiddle: http://jsfiddle.net/bikiew/c7jQk/1/

+0

謝謝!正是我在找什麼。 – Halufolia