см. Код ниже :) На мой взгляд, это не лучший подход и определенно будет иметь проблемы с производительностью для больших списков, но он работает (теперь я использовал indexOf(2)
, но вы можете пропустить любую правду / ложьаргумент)
var autoFilter = angular.module("autoFilters",[]);
autoFilter.controller("filterController",['$scope','$http', function ($scope,$http) {
$scope.searchSuggest = function(){
//$http({method: 'GET', url: 'json/searchSuggestions.json'}).success(function(data) {
$http.get("assets.json").then(function(response) {
//var str = JSON.stringify(response);
//var arr = JSON.parse(str);
$scope.suggestionResult = response.data;
console.log($scope.suggestionResult);
//$scope.arrayData = ["asset_types:document/data_sheet","asset_types:document/brochure"];
}).catch(function activateError(error) {
alert('An error happened');
});
}
$scope.showProduct = function(){
}
}]);
autoFilter.filter('arrayData', function (){
return function(data){
// if you are using jQuery you can simply return $.grep(data, function(d){return d.id.indexOf('2') >-1 });
return data.filter(function(entry){
return entry.id.indexOf('2') > -1
})
}
});
Имея опыт работы с большими списками, я бы, однако, предложил вам избегать использования отдельного фильтра для этого и скорее манипулировать им в коде .js.Вы можете легко фильтровать данные, когда запрашиваете их с помощью $ http.get, например:
$scope.suggestionResult = response.data.filter(function(){
return /* condition comes here */
}
Таким образом, вы не перегружаете DOM и помогаете браузеру обрабатывать иногда медленный цикл дайджеста AngularJS.
Если вам нужно, чтобы он был динамическим (например, условия фильтрации могут быть изменены пользователем), тогда добавьте ng-change или $ watch или ng-click к изменяемой информации и на этом действии повторно отфильтруйте $ scope.suggestionResult изисходный ответ. данные