Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angularjs 在控制器中链接角度过滤器,同时使其可变_Angularjs_Filter - Fatal编程技术网

Angularjs 在控制器中链接角度过滤器,同时使其可变

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)

假设我创建了一个Angular应用程序并编写了一些新的过滤器:只显示
奇数
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>