Есть ли у вас лучший способ фильтрации массива с помощью поиска?
Один из подходов заключается в создании пользовательского фильтра:
app.filter("myFilter", function() {
return function(inputArr,vname) {
//repopulate the array from a copy every time input changes
var result = inputArr.concat();
//filter array if vname is a substring from item.name
if (vname && vname.trim() != '') {
result = result.filter((item) => {
return (item.name.toLowerCase().indexOf(vname.toLowerCase()) > -1);
});
};
return result;
};
})
Использование:
<input type="text" ng-model="namev" />
<div ng-repeat="item in items | myFilter : namev">
{{item.name}} {{item.contents}}
</div>
Для получения дополнительной информации см. AngularJS Developer Guide - Создание пользовательских фильтров
Можете ли вы объяснить цель inputArr
?
Первый аргумент функции фильтра - это массив для фильтрации. Таким образом, его можно использовать с другими переменными области видимости:
<div ng-repeat="item in items | myFilter : namev">
{{item.name}} {{item.contents}}
</div>
<div ng-repeat="o in otherItems | myFilter : namev">
{{o.name}} {{o.contents}}
</div>
Когда AngularJS передает данные в фильтр, он вызывает функцию фильтра с данными в качестве первого аргумента. Последующие аргументы происходят из выражений, разделенных двоеточиями (:
).
Для получения дополнительной информации см. AngularJS Developer Guide - Использование фильтров в шаблонах представления