$ rouProvider中的Angular JS $ http未定义

时间:2014-06-07 16:18:13

标签: angularjs

我在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]});
}]);

2 个答案:

答案 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)

您无法在模块配置中注入服务。

但是如果您想在配置中执行此操作,可以将代码移动到提供程序中。