我在routeProvider中有以下代码但由于某种原因$ http回来未定义。我错过了什么?
config(['$routeProvider', function($routeProvider, $http) {
var routes = ['partial1','partial2'];
angular.forEach(routes, function(route, key) {
var defaultUrl = 'partials/' + route + '.html',
deviceUrl = 'partials/' + route + '.' + getDevice() + '.html';
$http.get(deviceUrl).
success(function() {
$routeProvider.when('/' + route, {templateUrl: deviceUrl, controller: route + 'Ctrl'});
}).
error(function(){
$routeProvider.when('/' + route, {templateUrl: defaultUrl, controller: route + 'Ctrl'});
});
});
$routeProvider.otherwise({redirectTo: '/' + routes[0]});
}]);
答案 0 :(得分:3)
您忘记为依赖注入器注释 $ http 。
此外,无法将服务注入配置中。
要解决此问题,您还可以手动注入 $ http 。
这是一个有效的例子:
config(['$routeProvider', function($routeProvider) {
var routes = ['partial1','partial2'];
angular.forEach(routes, function(route, key) {
var defaultUrl = 'partials/' + route + '.html',
deviceUrl = 'partials/' + route + '.' + getDevice() + '.html';
var initInjector = angular.injector(['ng']);
var $http = initInjector.get('$http');
$http.get(deviceUrl).
success(function() {
$routeProvider.when('/' + route, {templateUrl: deviceUrl, controller: route + 'Ctrl'});
}).
error(function(){
$routeProvider.when('/' + route, {templateUrl: defaultUrl, controller: route + 'Ctrl'});
});
});
$routeProvider.otherwise({redirectTo: '/' + routes[0]});
}]);
答案 1 :(得分:1)
您无法在模块配置中注入服务。
但是如果您想在配置中执行此操作,可以将代码移动到提供程序中。