无法在AngularJS的控制器中插入筛选器

无法在AngularJS的控制器中插入筛选器,angularjs,filter,dependency-injection,Angularjs,Filter,Dependency Injection,嗨,我刚开始学习英语。我使用的是AngularJS 1.2.4。 每当我尝试在控制器中插入过滤器时,都会出现以下错误: 错误:错误:unpr未知提供程序未知提供程序: senderReceiverDetailInfoProvider我就是这样做的。我把过滤器从机器上偷走了 var MyApp=angular.module('MyApp',[]); MyApp.filter('reverse',function(){ 返回函数(输入,大写){ 输入=输入| |“”; var out=“”; 对于(

嗨,我刚开始学习英语。我使用的是AngularJS 1.2.4。 每当我尝试在控制器中插入过滤器时,都会出现以下错误:

错误:错误:unpr未知提供程序未知提供程序:
senderReceiverDetailInfoProvider我就是这样做的。我把过滤器从机器上偷走了

var MyApp=angular.module('MyApp',[]);
MyApp.filter('reverse',function(){
返回函数(输入,大写){
输入=输入| |“”;
var out=“”;
对于(变量i=0;i

现在,您可以在模板中像这样使用过滤器:
{{{myObject.value | reverse}}

使用ng repeat的过滤器就是这个过滤器

必须在作用域上定义筛选函数,只需尝试:

$scope.sendReceiveFilter = function(senderReceiverDetailInfo,index){
              conole.log("i",index);
           if(senderReceiverDetailInfo.description != ''){
                    return true;
           }else{
                    return false;
           }
    }
更新:要创建自己的过滤器函数来过滤数组,您需要定义

myApp.filter('senderReceiver', function () {
    function (senderReceivers, index) {
        var filteredsenderReceivers = [];
        // Fill the above array with filtered values from senderReceivers array
        return filteredsenderReceivers
    }
});
senderReceiver
是一个数组

将过滤器用作

您收到的错误是因为您没有正确定义过滤器。过滤器应该返回一个函数。因此,请将过滤器更新为:

myApp.filter('senderReceiver', function(){
    return function(senderReceiverDetailInfo,index){
        console.log("i",index);
        if(senderReceiverDetailInfo.description != ''){
            return true;
        }else{
            return false;
        }
    };    
});
您声明筛选器的方式使我相信您正在查找名为
senderReceiverDetailInfo
info
的依赖项。由于这些未定义为Angular资产,Angular将抛出一个错误,抱怨在您的案例中找不到命名资产的提供程序
senderReceiverDetailInfoProvider
,这正是日志的状态

如果要在控制器中使用过滤器,可以插入,然后只需调用:

$filter('senderReceiver')(senderReceiverDetailInfo,index);

要回答上一个问题,您应该将所有相关资产(无论是控制器、服务还是过滤器)放在同一个模块中。

您应该将其附加到模块中,而不是将其插入到controller@PatrickReck你能详细说明你所说的附加是什么意思吗?这是否意味着我应该使用第二种方法?如果是,那么您能否给出一个小代码示例,说明如何在ng repeat on html中使用它?什么是senderReceiverDetailInfo?@ShawnC。它是我在函数中使用的过滤器参数名称,它将是一个包含描述作为其属性的对象。所以senderReceiverDetail就是这样一个对象数组。当我在controllerI中直接在作用域上定义了过滤函数时,它工作得很好。当我开始做这个和那个时,它工作得很好。但是现在为了模块化,我不想在控制器中定义它。在同一链接中,他们在标题“在控制器、服务和指令中使用过滤器”下描述了在控制器中注入过滤器的一种方法。所以我也在做同样的事情。那为什么我的注射无效而他们的注射有效呢?或者自定义筛选器必须这样定义,并且它们的筛选器正在工作,因为筛选器是Angular中预定义的服务?您仍然必须将其声明为在答案中发布的。如果要在ViewModel中而不是ViewOk中使用它,则只能将其注入控制器。我至少解决了您建议的过滤器定义错误。然而,如果不将它注入控制器并分配给作用域,我就无法在html中直接使用它。这是正确的行为吗?我的意思是,我必须这样做,否则它可以直接使用,而无需注入并将其分配给作用域?另外,当我尝试在RepeatNG中使用该过滤器时,应该传递给过滤器函数的第二个索引变量没有传递。如果您只有一个模块,并且在该模块上制作了过滤器,那么您不需要在任何地方注入它来正确使用它。我用你说的方式来定义它。然而,如果我在html中直接使用它(特别是ng repeat),而不注入它的控制器并将其分配给作用域,它将不起作用。这是正常的行为吗?另外,在ng repeat中使用筛选器时应传递的第二个索引参数未传递为什么?我如何才能做到这一点?
    angular.module('myfilters',[]).filter('senderReceiver',function(senderReceiverDetailInfo,index){
              conole.log("i",index);
           if(senderReceiverDetailInfo.description != ''){
                    return true;
           }else{
                    return false;
           }
    });
      angular.module('myapp',['myfilters']);
var MyApp = angular.module('myapp',[]);

MyApp.filter('reverse', function() {
    return function(input, uppercase) {

        input = input || '';
        var out = "";

        for (var i = 0; i < input.length; i++) {
            out = input.charAt(i) + out;
        }

        if (uppercase) {
            out = out.toUpperCase();
        }

        return out;
    };
});
$scope.sendReceiveFilter = function(senderReceiverDetailInfo,index){
              conole.log("i",index);
           if(senderReceiverDetailInfo.description != ''){
                    return true;
           }else{
                    return false;
           }
    }
myApp.filter('senderReceiver', function () {
    function (senderReceivers, index) {
        var filteredsenderReceivers = [];
        // Fill the above array with filtered values from senderReceivers array
        return filteredsenderReceivers
    }
});
myApp.filter('senderReceiver', function(){
    return function(senderReceiverDetailInfo,index){
        console.log("i",index);
        if(senderReceiverDetailInfo.description != ''){
            return true;
        }else{
            return false;
        }
    };    
});
$filter('senderReceiver')(senderReceiverDetailInfo,index);