Angularjs 在控制器中链接角度过滤器,同时使其可变
假设我创建了一个Angular应用程序并编写了一些新的过滤器:只显示Angularjs 在控制器中链接角度过滤器,同时使其可变,angularjs,filter,Angularjs,Filter,假设我创建了一个Angular应用程序并编写了一些新的过滤器:只显示奇数s,只显示幸运数字 有一个oddList过滤器和一个luckyList过滤器: var app = angular.module('app', []); app.filter('oddList', function() { return function(items) { var filtered = []; angular.forEach(items, function(item)
奇数
s,只显示幸运
数字
有一个oddList
过滤器和一个luckyList
过滤器:
var app = angular.module('app', []);
app.filter('oddList', function() {
return function(items) {
var filtered = [];
angular.forEach(items, function(item) {
if (item % 2 !== 0)
filtered.push(item);
});
return filtered;
};
});
app.filter('luckyList', function() {
return function(items) {
var filtered = [];
angular.forEach(items, function(item) {
if (item === 2 || item === 7 || item === 11)
filtered.push(item);
});
return filtered;
};
});
在视图部分,我可以链接这些过滤器:
<ul><li ng-repeat="number in numbers | oddList | luckyList">{$number}</li></ul>
以及带有伪代码的控制器:
app.controller('main', function($scope, $filter) {
$scope.numbers = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15];
$scope.listFilter = $filter('oddList | luckyList');
});
知道我如何在控制器中链接(变量)过滤器吗?希望能够在奇数、幸运和/或两者之间切换。一种方法是使用函数返回过滤后的数据:
function MainCtrl($scope, $filter) {
$scope.numbers = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15];
$scope.filteredNumbers = function() {
var result = $scope.numbers;
if ($scope.oddListEnabled) {
result = $filter('oddList')(result);
}
if ($scope.luckyListEnabled) {
result = $filter('luckyList')(result);
}
return result;
};
}
以及模板:
<ul>
<li ng-repeat="number in filteredNumbers()">
{{number}}
</li>
</ul>
-
{{number}}
下面是一个例子:我见过的最接近的例子……太棒了!甚至没有考虑使用函数作为NG重复数据提供程序。谢谢,但是可以做一些像
和这样的事情吗,所以过滤器会自动更改吗?是的,@ViniciusPires您也可以定义自定义过滤器:“”,通过使用“:”,您可以将新参数传递给函数:'filter('filteredNumbers',function(){return function filteredNumbers(numbers,enabledList){};}'对不起,我想我说得不够清楚。。。我在问是否可以在运行时更改过滤器,从控制器或直接数据绑定为过滤器设置一个新值。。。这时我明白了,只要稍作改动就可以做到我所说的:。。。因此,可以将$scope.selectedFilter
的值设置为{name:'Coke'}
或{category:'Soda'}
,具体取决于用户在组合框
中选择的内容。。。只是分享:)
<ul>
<li ng-repeat="number in filteredNumbers()">
{{number}}
</li>
</ul>