将$ scope注入过滤器(AngularJS)

时间:2014-02-05 16:37:34

标签: angularjs angularjs-scope inject angularjs-filter

我正在尝试做什么:

我在关联数组上使用ng-repeat指令,我想过滤它。角度过滤器的构建不适用于关联数组/哈希。因此,我正在尝试编写自己的过滤器(受http://angularjs.de/artikel/angularjs-ng-repeat启发;它是德语版,但重要的代码低于标题“Beispiel 2:Filtern von Hashes mittels eigenem Filter”,意思是“示例2” :使用您自己的过滤器过滤哈希值“)。

ng-repeat:

tr ng-repeat="(key, machine) in machines | customFilter | orderObjectBy:'name':false"

注意:orderObjectBy也是customFilter。

过滤器:

toolApp.filter('customFilter', [function(){
    return function(machines){
        var result = {};

        angular.forEach(machines, function(machine, key){
            /*if(machine.name.contains(filter)){
                result[key] = machine;
            }*/
            //if(machine.name.contains("a")){
                result[key] = machine;
            //}
        });
        return result;
    };
}]);

过滤器使用硬编码的“filter-criterium”。但我想在列表上方有一个文本框,用户可以在其中输入“filter-criterium”。 我的问题是,我不知道如何将此值插入过滤器。我在互联网上找不到太多,我发现的东西,对我来说都没有用。

有谁知道如何插入值oder可能是一种不同的方法。

提前感谢每一个答案!如果您需要更多信息,请告诉我们!我试着保持简短:>。

来自德国的问候

1 个答案:

答案 0 :(得分:6)

您可能拥有自定义过滤器的参数。

假设您有一个输入字段:

<input ng-model="myParam">

和像你一样的ng-repeat:

<tr ng-repeat="(key, machine) in machines | customFilter:myParam | orderObjectBy:'name':false" >

然后您可以在自定义过滤器中访问此参数:

toolApp.filter('customFilter', [function(){
    return function(machines, myParam){
        var result = {};

        angular.forEach(machines, function(machine, key){
            if(machine.name.contains(myParam)){
                result[key] = machine;
            }
        });
        return result;
    };
}]);

请注意: 请注意myParam值是使用“未定义”值初始化的。您必须在控制器中设置默认值或在customFilter中处理它。否则,您只能在开始输入后看到您的列表。