AngularJs - 仅按自定义过滤器中的某些字段过滤对象
AngularJs - Filter an object only by certain fields in a custom filter
我正在处理这个 codepen。数据来自对象数组,我只需要按 name 和 amount.
进行筛选
我有这个代码,但是如果你在搜索框中输入一个字符,它只会按数量搜索,而不是名称 ] 也。换句话说,如果您键入“warren”或“37.47”,它必须 return 相同的结果,但不会没用。
var filterFilter = $filter('filter');
$scope.filter = {
condition: ""
};
$scope.$watch('filter.condition',function(condition){
$scope.filteredlist = filterFilter($scope.expenses,{name:condition} && {amount:condition});
$scope.setPage();
});
您想为您的应用创建自定义过滤器。
directiveApp.filter("myFilter", function () {
return function (input, searchText) {
var filteredList = [];
angular.forEach(input, function (val) {
// Match exact name
if (val.name == searchText) {
filteredList.push(val);
}
// Match exact amount
else if (val.amount == searchText) {
filteredList.push(val);
}
});
input = filteredList;
return input;
};
});
您可以在此过滤器中编写您的逻辑,现在使用此过滤器来过滤您的列表。
更新
您可以将此过滤器应用到您的自定义过滤器中 pagination
。
这是您的代码的新版本。 Codepen
代码更新列表
为您的 ng-repeat 属性添加了新的过滤器参数
ng-重复="expense in filteredlist | pagination: pagination.currentPage : numPerPage : filter.condition"
...
嗯,终于(基于idea of Abhilash P A and reading the docs),我这样解决了我的问题:
var filterFilter = $filter('filter');
$scope.filter = {
condition: ""
};
$scope.$watch('filter.condition',function(condition){
$scope.filteredlist = filterFilter($scope.expenses,function(value, index, array){
if (value.name.toLowerCase().indexOf(condition.toLowerCase()) >= 0 ) {
return array;
}
else if (value.amount.indexOf(condition) >= 0 ) {
return array;
}
});
$scope.setPage();
});
决赛codepen! (真棒)
我正在处理这个 codepen。数据来自对象数组,我只需要按 name 和 amount.
进行筛选我有这个代码,但是如果你在搜索框中输入一个字符,它只会按数量搜索,而不是名称 ] 也。换句话说,如果您键入“warren”或“37.47”,它必须 return 相同的结果,但不会没用。
var filterFilter = $filter('filter');
$scope.filter = {
condition: ""
};
$scope.$watch('filter.condition',function(condition){
$scope.filteredlist = filterFilter($scope.expenses,{name:condition} && {amount:condition});
$scope.setPage();
});
您想为您的应用创建自定义过滤器。
directiveApp.filter("myFilter", function () {
return function (input, searchText) {
var filteredList = [];
angular.forEach(input, function (val) {
// Match exact name
if (val.name == searchText) {
filteredList.push(val);
}
// Match exact amount
else if (val.amount == searchText) {
filteredList.push(val);
}
});
input = filteredList;
return input;
};
});
您可以在此过滤器中编写您的逻辑,现在使用此过滤器来过滤您的列表。
更新
您可以将此过滤器应用到您的自定义过滤器中 pagination
。
这是您的代码的新版本。 Codepen
代码更新列表
为您的 ng-repeat 属性添加了新的过滤器参数
ng-重复="expense in filteredlist | pagination: pagination.currentPage : numPerPage : filter.condition"
...
嗯,终于(基于idea of Abhilash P A and reading the docs),我这样解决了我的问题:
var filterFilter = $filter('filter');
$scope.filter = {
condition: ""
};
$scope.$watch('filter.condition',function(condition){
$scope.filteredlist = filterFilter($scope.expenses,function(value, index, array){
if (value.name.toLowerCase().indexOf(condition.toLowerCase()) >= 0 ) {
return array;
}
else if (value.amount.indexOf(condition) >= 0 ) {
return array;
}
});
$scope.setPage();
});
决赛codepen! (真棒)