我创建了一个提供程序,通过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'未定义的
答案 0 :(得分:0)
您从$get
函数返回提供程序上下文,该函数应该是this.$get
当您使用$provide
服务注册提供程序时,您正在执行的操作已完成。有关详细信息,请阅读我的Another Answer here
<强>提供商强>
MyApp.provider('$configuration', function() {
this.$get: function($http, localStorageService) {
return {
getConfiguration: function() {
...code here
}
}
}
});