AngularJS $routeProvider 解析不工作

AngularJS $routeProvider resolve not working

我在 Angular 中使用 this 路由教程。这是它给出的使用 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 时查找未定义。

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

我怀疑与您的服务工厂有关,因为请求是在 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 更改为数据,如果您真的将其包装成那样,请更改它。

lookupService 中的 getLookups 函数缺少 return:

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