带有自定义Provider的.config()中的未知提供程序

时间:2015-01-26 10:30:04

标签: angularjs service-provider angularjs-injector

我在app.js中得到了这个:

angular.module('App',[]).config(['TranslationProvider', function (TranslationProvider) {
//codes...
}]);    

此服务在另一个文件中:

angular.module('App')

.provider('Translation', function() {
var translations = {foo:"bar"}

this.$get = function(){
    return translations;
};

});

服务js文件没有404错误,但是当角度注入器尝试实例化时,它会给我这个错误:

Uncaught Error: [$injector:modulerr] Failed to instantiate module App due to:
Error: [$injector:unpr] Unknown provider: TranslationProvider

我已经关注了angjs文档https://docs.angularjs.org/guide/providers

2 个答案:

答案 0 :(得分:1)

这似乎是Angular 1.2.x中的一个错误。通话的顺序很重要。当您在provide之前致电config时,它会正常工作。无论顺序如何,它也适用于Angular 1.3.x.

答案 1 :(得分:-1)

你快到了。

首先是配置:

angular.module('App')
    .config(["TranslationProvider", function(theProvider) {
        console.log("in config" + theProvider)
        theProvider.setName("some name");
    }]);

您遇到的错误是由于您使用构造函数作为参数。

现在是您的提供者:

angular.module('App')
    .provider('Translation', function TranslationProvider() {
        var translations = {foo:"bar", name:""};
        var dynamicName;

        this.setName = function(configName) {
            dynamicName = configName;
        };

        this.$get = function(){
            translations.name = dynamicName;
            return translations;
        };
    });

另请注意,也可以使用匿名函数(即.provider('Translation', function () {),代码也可以正常工作。

在控制器中全部使用它:

angular.module('App')
   .controller('MyController', [
    '$scope',
    'Translation',

    function ($scope,
              translationProvider) {

        $scope.modal = {};
        $scope.projects = [];

        console.log(translationProvider)
        $scope.foo = translationProvider;
    }]);