AngularJS $ routeProvider解析不起作用

时间:2015-07-24 13:28:02

标签: angularjs angular-routing

我正在使用this教程在Angular中进行路由。以下是使用resolve的示例:

$routeProvider
    .when("/news", {
        templateUrl: "newsView.html",
        controller: "newsController",
        resolve: {
            message: function(messageService){
                return messageService.getMessage();
        }
    }
})

这是我的路线提供者:

$routeProvider
    .when('/agency/add',
    {
        controller: 'agencyController',
        templateUrl: baseUrl + 'Content/templates/agencyUpsert.html',
        resolve: {
            lookup: ['lookupService', function (lookupService) {
                //lookupService.getLookups().then(function (response) {
                //    return response.data;
                //});
                return lookupService.getLookups();
            }]
        }
    })

这是我的查询服务:

angular.module('app').factory('lookupService', ['$http', 'baseApiUrl', function ($http, baseApiUrl) {
    var getLookups = function () {
        $http.get(baseApiUrl + 'api/lookups/').then(function (data) {
            return data.data;
        });
    };
    return {
        getLookups: getLookups
    };
}]);

最后,我的控制员:

angular.module('app').controller('agencyController', ['$scope', 'lookup',
    function ($scope, lookup) {
        $scope.states = lookup.states;
    }
}]);

lookupService(和服务器端API)确实受到了攻击,但我得到的错误是当我尝试在控制器中分配$scope.states时,查找未定义。

为什么通过我的路由解析没有正确地将依赖项注入我的控制器?

2 个答案:

答案 0 :(得分:6)

return中的getLookups函数中缺少lookupService

angular.module('app').factory('lookupService', ['$http', 'baseApiUrl', function ($http, baseApiUrl) {
  var getLookups = function () {
    // changed here
    return $http.get(baseApiUrl + 'api/lookups/').then(function (data) {
      return data.data;
    });
  };
  return {
    getLookups: getLookups
  };
}]);

答案 1 :(得分:0)

我怀疑与您的服务工厂有关,因为请求被API命中,我怀疑工厂是从那里返回数据。

你可以查看吗。

angular.module('app').factory('lookupService', ['$http', 'baseApiUrl', function ($http, baseApiUrl) {

    var lookups = {};
    lookups.getLookups = function () {
        $http.get(baseApiUrl + 'api/lookups/').success(function (data) {
            return data;
        }).error(function(data,status){
          console.log('failed with ' + status); // you need to work on this
        });
    };

    return lookups;
}]);

注意我已经将data.data更改为数据,如果你确实将它包装成更改它。