无法在AngularJS的控制器中插入筛选器
嗨,我刚开始学习英语。我使用的是AngularJS 1.2.4。 每当我尝试在控制器中插入过滤器时,都会出现以下错误: 错误:错误:unpr未知提供程序未知提供程序:无法在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=“”; 对于(
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);