2015-01-28 3 views
1

Я начинаю с Angular, и у меня есть множественный выбор, чтобы отфильтровать список по имени.фильтр выбрать несколько angularJS

<select multiple ng-options="data.name for data in datas" ng-model="filterData"> 
</select> 

Я могу фильтровать только один значение, делая это:

<div class="container " data-ng-repeat="data in datas | filter : filterData[0].name">

, но в моем случае я хочу, чтобы передать массив в фильтр для фильтрации с несколькими значениями в то же время

Я должен создать свой собственный фильтр, чтобы сделать это?

{ 
     "datas": [ 
      {"name": "first", "id": 1}, 
      {"name": "two", "id": 2}, 
      {"name": "three", "id": 3}, 
     ] 
} 

Благодаря

ответ

0

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

 
    myApp.controller('myController', myController); 
 

 
    function myController($scope) { 
 
    $scope.datas = [{ 
 
     "name": "first", 
 
     "id": 1 
 
    }, { 
 
     "name": "two", 
 
     "id": 2 
 
    }, { 
 
     "name": "three", 
 
     "id": 3 
 
    }, ]; 
 

 
    $scope.filterData = []; 
 

 
    $scope.byArray = function(myArray) { 
 
     return function(item) { 
 
     return !myArray.some(function(word) { 
 
      return item.name.indexOf(word.name) > -1;    
 
     }); 
 
     }; 
 

 
    } 
 
    }
<div ng-app="myApp" ng-controller="myController"> 
 
    <select multiple ng-multible="true" size="3" ng-options="data.name for data in datas" ng-model="filterData"> 
 
    </select> 
 
    <div class="container" data-ng-repeat="data in datas | filter : byArray(filterData)">{{data.name}} 
 
    </div> 
 
</div> 
 
<script src="https://code.angularjs.org/1.3.11/angular.js"></script>

+0

Благодаря это работает. Я просто добавил условие для отображения всех данных по умолчанию без фильтра. – Dujard

1

Вы можете сделать пользовательский фильтр и предварительно определить некоторые значения фильтра:

<div class="container " data-ng-repeat="data in datas | filter : byArray"> 

var _filterTheseWords = ["first", "two", "three"]; 
$scope.byArray = function(item) { 
    return _filterTheseWords.some(word) { 
     return item.name.indexOf(word) > -1; 
    }); 
} 
Смежные вопросы