Angularjs 过滤器错误: "Error: Unknown provider: textProvider"

16
我为我的AngularJS项目创建了一个类似于以下jsFiddle的自定义过滤器http://jsfiddle.net/tUyyx/。请注意,保留HTML标记。
myapp.filter('truncate',function(text,length){
    var end = "..."
    text = text.replace(/\w\S*/g, function(txt){return txt.charAt(0).toUpperCase() + txt.substr(1).toLowerCase();});
    if (isNaN(length))
     length = 23;



    if (text.length <= length || text.length - end.length <= length) {
        return text;
    }
    else {
        return String(text).substring(0, length-end.length) + end;
    }

});

但是当我使用过滤器时,会出现以下错误。
Error: Unknown provider: textProvider <- text <- truncateFilter
    at Error (<anonymous>)
    at http://localhost/javascripts/lib/angular.min.js:28:236
    at Object.c [as get] (http://localhost/javascripts/lib/angular.min.js:26:13)
    at http://localhost/javascripts/lib/angular.min.js:28:317
    at c (http://localhost/javascripts/lib/angular.min.js:26:13)
    at Object.d [as invoke] (http://localhost/javascripts/lib/angular.min.js:26:147)
    at http://localhost/javascripts/lib/angular.min.js:28:335
    at Object.c [as get] (http://localhost/javascripts/lib/angular.min.js:26:13)
    at http://localhost/javascripts/lib/angular.min.js:99:481
    at o (http://localhost/javascripts/lib/angular.min.js:66:471) 

我已经像这样创建了我的模块。
var myapp = angular.module('myapp', ['ngResource']);

我做错了什么?

1个回答

34

如果您查看jsFiddle中的代码,该过滤器函数返回一个以text等为参数的函数。应该是这样的:

myapp.filter('truncate',function(){
    return function(text, length) {
        var end = "..."
        text = text.replace(/\w\S*/g, function(txt){return txt.charAt(0).toUpperCase() + txt.substr(1).toLowerCase();});
        if (isNaN(length))
         length = 23;



        if (text.length <= length || text.length - end.length <= length) {
            return text;
        }
        else {
            return String(text).substring(0, length-end.length) + end;
        }
    }
});

你收到“未知提供者:textProvider”的原因是因为你在过滤器中将text作为参数。这使得Angular查找一个名为text的服务,但该服务不存在。你返回的函数需要以text作为参数。
可以这样想,第一个函数(你传递给angular.filter的函数)是首先创建过滤器的函数。该函数在应用程序中仅执行一次。该函数的职责是创建另一个函数并返回它,而它返回的函数就是你的过滤器。你返回一个函数的原因是让你根据你的系统返回不同的实现,例如:
myapp.filter('truncate', function(myService) {
    if (myService.someCondition()) {
        return function(text, length) {
            // return the text as usual
        }
    } else {
        return function(text, length) {
            // return the text and do some other things as well
        }
    }
});

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接