Отклонение маршрутизатора пользовательского интерфейса Angularjs решить, как избежать загрузки шаблона

#angularjs #angular-ui-router

#angularjs #angular-ui-router

Вопрос:

У меня есть этот код

 //Setting up route
angular.module('my')
    .config(['$stateProvider',function($stateProvider) {
        //  Check if the user is just logged
        var checkLoggedOut = function($http) {
            /* if the user is just logged the server send a Forbidden status 403*/
            return $http.get('/loggedout');
        };
        //  Check if the user is logged
        var checkLoggedIn = function($http) {
            return $http.get('/loggedin');
        };

        // states for my app
        $stateProvider
            .state('user', {
                abstract: true,
                templateUrl: 'users/views/index.html',
                resolve: {
                    loggedin: checkLoggedIn
                }
            })
            .state('user_register', {
                url: '/user/register',
                templateUrl: 'users/views/register.html',
                resolve: {
                    loggedin: checkLoggedOut
                },
                controller:'UserRegisterCtrl'
            });
    }
    ]);
 

если пользователь только что вошел в систему, он не может перейти в состояние user_register

но шаблон все еще загружен.

Является ли это желаемым поведением ?

Есть ли способ избежать этого?

Обновить

может быть, мой вопрос может быть неправильно понят

Я хочу знать, есть ли способ избежать загрузки шаблона, если разрешение отклонено, я имею в виду, в целом, с какой стати шаблон загружается при отклонении разрешения imo, если разрешение не выполняется, шаблон не должен загружаться

В КОНЕЧНОМ ИТОГЕ С

 .factory('httpInterceptor', ['$q','$location',function ($q, $location) {
        return {
            'response': function(response) {
                if (response.status === 401) {
                    $location.path('/signin');
                    return $q.reject(response);
                }
                if (response.status === 403) {
                    $location.path('/');
                    return $q.reject(response);
                }
                return response || $q.when(response);
            },
            'responseError': function(rejection) {
                if (rejection.status === 401) {
                    $location.path('/signin');
                    return $q.reject(rejection);
                }
                if (rejection.status === 403) {
                    $location.path('/');
                    return $q.reject(rejection);
                }
                return $q.reject(rejection);
            }

        };
    }
 

Ответ №1:

Во-первых, выполнение вызова REST для проверки того, входит ли пользователь в систему при каждом переходе состояния, может быть дорогостоящим. Возможно, просто было бы лучше сохранить состояние пользователя в браузере.

Во-вторых, еще один вопрос, который вы задаете: вы можете создать обработчик событий для прослушивания события $stateChangeStart. В этом обработчике вы можете проверить, вошел ли пользователь в систему и сможет ли он получить доступ к этому состоянию.

Эта ссылка должна помочь http://www.frederiknakstad.com/2014/02/09/ui-router-in-angular-client-side-auth /

Комментарии:

1. ммм, я не спрашиваю, как это сделать, но с какой стати, если разрешение отклонено, шаблон загружается, и если есть способ избежать этого, извините, я дал вам -1

Ответ №2:

Ваша функция checkLoggedIn должна управлять случаем, когда пользователь не прошел проверку подлинности. Он может перенаправить его в соответствующее состояние, используя $state.go() или $location.