AngularJS - 使用resolve时的问题

时间:2017-04-27 10:40:01

标签: angularjs angular-ui-router

我基本上需要调用一个服务器,在加载控制器之前,它会返回一个JSON结构。

我使用了很多方法来存档,但它无法正常工作。它没有向我显示任何错误,页面空白。关于发生了什么的任何线索?

这是我的控制器..

angular
.module('app',[
    'ngAnimate',
    'ui.router',
    'ui.bootstrap',
    'ngCookies'
])
.run(function($rootScope) {
    $rootScope.backendServer = "http://localhost:5000/";
})
.config(['$urlRouterProvider','$stateProvider', function($urlRouterProvider,$stateProvider) {
    $stateProvider
        .state('cms',{
            url: '/my',
            templateUrl: './app/templates/my.html',
            controller : 'my',
            resolve: {
                dbState: function ($q) {
                    var defer = $q.defer();
                    Database.check().then(function (s) {
                        defer.resolve(s);
                    });
                    return defer.promise;
                }
            }
        })
}])
.controller(function ($scope){

})

......这是我的服务:

angular
.module('app')
.factory('Database',['$http', '$rootScope','$q', function($http, $rootScope, $q) {
    return {
        check: function () {
            var call = $rootScope.backendServer + 'cms/database/check';
            return $http.get(call);
        }
    }
}]);

1 个答案:

答案 0 :(得分:3)

当您已经返回承诺时,不要创建延迟对象。所以删除defer并返回工厂函数

另外,请注入Database服务以解决

 resolve: {
     dbState: function(Database) {

         return Database.check()
     }
 }

在控制器中像这样抓住它

.controller("ctrl", function($scope, dbState) {
    console.log(dbState.data)

})

Demo