2015-05-04 3 views
2

У меня проблема с фильтрами AngularJS.Фильтр AngularJS в определенных полях с условием «ИЛИ»

Я не хочу «фильтровать» с одним полем ввода, но для того, чтобы сделать список фильтром с несколькими полями с условием «ИЛИ».

А вот демо.

http://jsbin.com/wodewexetu/2/edit

Я wan't фильтровать список только с name и description полей.

Если я набираю: «привет», «мир» или «угловой», он не должен возвращать никакого результата.

Если я набираю: «пример», он должен возвращать только 1-й и 3-й строки.

Если я напечатаю: «описание», оно должно возвращать только 1-ю и 2-ю строки. и т. д.

Так что, в общем, я хочу фильтровать одно имя, несколько, но определенные поля в списке с условием «ИЛИ».

Я смог сделать условие «И», но это не то, что мне нужно.

Я также много искал об этой теме, но, к сожалению, не те коды и примеры работали для меня.

Пожалуйста, помогите и спасибо заранее.

ответ

1

Вы можете создать свой собственный custom filter и применять любые функции, которые вам нужно.

В вашем случае, что-то вроде:

app.filter('customFilter', function() { 
    return function(items, search) { 
    if (!search) { 
     return items; 
    } 
    var searchItems = new RegExp(search.split(' ').join("|"), "i"); 
    return items.filter(function(item) { 
     return searchItems.test(item.name) || searchItems.test(item.description); 
    }); 
    }; 
}); 

Смотреть это работает here.

+0

Я искал создать настраиваемый фильтр, но не смог его обработать. Спасибо, это именно то, что мне нужно. –

1

Я думаю, что фильтры OR еще не поддерживаются. Я решил это, создав мета-ресурс под названием $searchable.

angular.forEach($scope.items, function (item){ 
    Item.$searchable = [item.name, item.description].join (' '); 
} 

В HTML:

<input type="text" ng-model="search.$searchable">