AngularJS $ routeProvider Метод разрешения не работает - PullRequest
0 голосов
/ 28 мая 2019

В моем коде я определяю следующие два маршрута:

    $routeProvider.when('/problem/report', {
        templateUrl: '/app/management/problem/reportAProblem.html',
        controller: 'reportAProblemCtrl',
        resolve: {
            authorized: function($http, $location) {
                var path = $location.path();
                return $http.get('/svc/authorize/view?urlPath=' + path).then(function(response) {
                    var data = response.data;
                    if (response.data.result === 'NOT_AUTHORIZED') {
                        throw "NOT_AUTHORIZED";
                    }

                    return data;
                })
            }
        }
    });

    $routeProvider.when('/problem', {
        templateUrl: '/app/management/problem/problem.tmpl.html',
        controller: 'problemCtrl',
        resolve: {
            authorized: ['$authorization', function($authorization) {
                $authorization.authorize(); 
            }]
        }
    });

Первый случай, похоже, работает. Однако во втором случае функция была реорганизована в Сервис, и AngularJS, похоже, не ожидает разрешения Promise перед отображением страницы.

Реорганизованный код выглядит следующим образом:

angular.module('authorization', [])
.factory('$authorization', ['$http', '$location',function($http, $location) {

    var $authorization = {};

    $authorization.authorize = function() {

        var path = $location.path();
        return $http.get('/svc/authorize/view?urlPath=' + path).then(function(response) {
            var data = response.data;
            if (response.data.result === 'NOT_AUTHORIZED') {
                throw "NOT_AUTHORIZED";
            }

            return data;
        });
    }

    return $authorization;
}]);

Может кто-нибудь сказать мне, почему во втором случае, приведенном выше, не дожидается разрешения обещания перед отображением страницы?

1 Ответ

2 голосов
/ 28 мая 2019

Добавить возврат:

authorized: ['$authorization', function($authorization) { **return** $authorization.authorize(); }]
...