角度提供者,我无法调用提供者的功能

时间:2015-05-01 09:52:07

标签: angularjs

我创建了一个提供程序,通过Json文件检索应用程序的配置。 然后我在我的application.config中使用它来固定来自此配置对象的路由。

    MyApp = angular.module('MyApp', ['MyAppControllers','LocalStorageModule','ui.router']); 

这是我的配置提供程序的代码:

    MyApp.provider('$configuration', function() {
    return {
    $get : function($http,localStorageService) {
        return {
            getConfiguration:function() {       
                var config = localStorageService.get("configuration");
                console.log(config);
                if(config ==null || config == undefined) {

                    xhr = GetHttpRequest();                    
                    xhr.onreadystatechange = function () {     
                        if (xhr.readyState == 4) {                            
                            if (xhr.status == 200 || xhr.status == 304) {
                                localStorageService.set("configuration",xhr.responseText);
                                config = xhr.responseText;  
                            } else {
                                console.log('## Error loading configuration');
                            }
                        }
                    }
                    xhr.open('GET','/assets/js/My/config.json',false);      
                    xhr.send(null);
                    return JSON.parse(config);
                } else {
                    return config;
                }    
            }
        }
    }
    }

});

这里是我的路线配置的代码:

MyApp.config(['$stateProvider', '$urlRouterProvider','$configurationProvider',
    function ($stateProvider, $urlRouterProvider,$configurationProvider) {

    console.log($configurationProvider);

    configuration=$configurationProvider.getConfiguration();

    angular.forEach(configuration.url, function(value, key) {     
            $stateProvider.state(stateName,         
                { 
                 url: stateUrl,
                 views: stateView                                
                }
            );   
    });                  
    }        
]);

但是Chrome给了我这个错误:

[$ injector:modulerr]由于以下原因导致无法实例化模块MyApp: TypeError:无法读取属性' get'未定义的

1 个答案:

答案 0 :(得分:0)

您从$get函数返回提供程序上下文,该函数应该是this.$get当您使用$provide服务注册提供程序时,您正在执行的操作已完成。有关详细信息,请阅读我的Another Answer here

<强>提供商

MyApp.provider('$configuration', function() {
    this.$get: function($http, localStorageService) {
        return {
            getConfiguration: function() {
                ...code here
            }
        }
    }

});