AngularJS - 确定在路径更改时是否应通过ajax调用结果显示视图

时间:2014-10-30 10:00:22

标签: angularjs angular-ui-router

简单来说,我想检查一下,如果会话仍处于活动状态(这意味着用户已登录),则在显示某些路由的视图之前,如果没有,则重定向到登录视图。

我试图从登录页面内部监听$ routeChangeStart事件,默认情况下最初会显示该事件,但用户仍然可以通过输入路径转到其他视图。

现在我在做的是:

(function() {
    'use strict';

    angular.module("appClubS", ["appClubS.userModule", "appClubS.productModule", "clubsServices", "ngRoute", "ui.bootstrap"])
        .config(routeConfigurator);

    angular.module("appClubS")
        .controller("checkLoginCtrl", checkLoginController);

    checkLoginController.$inject = ['$scope', '$rootScope', '$location', 'userFactory'];
    routeConfigurator.$inject = ['$routeProvider', '$locationProvider'];

    function routeConfigurator($routeProvider, $locationProvider) {
        $routeProvider.when("/home", {
            templateUrl: "views/index.html"
        });

        // ...

        $routeProvider.when("/account-profile/my-redeem", {
            templateUrl: "views/member_zone/my.redeem.html",
            controller: 'checkLoginCtrl'
        });

        $routeProvider.when("/account-profile/my-survey", {
            templateUrl: "views/member_zone/my.survey.html",
            controller: 'checkLoginCtrl'
        });

    }

    function checkLoginController($scope, $rootScope, $location, userFactory) {
        var loginStatus = userFactory.loggedin();

        if (!loginStatus) {
            alert('Please Login First!');
            $location.path('/login');
        }
    }

})();

但在用户导航到登录页面之前,视图仍会显示。

有人可以帮忙吗?非常感谢提前。

1 个答案:

答案 0 :(得分:1)

您可以使用解析功能

 $routeProvider.when("/home", {
            templateUrl: "views/index.html",
            resolve:{
              checkLogin: function (sessionService) {
              sessionService.redirectIfLogged();
              }
            }
        });

因此,这可确保在呈现视图之前运行检查