简单来说,我想检查一下,如果会话仍处于活动状态(这意味着用户已登录),则在显示某些路由的视图之前,如果没有,则重定向到登录视图。
我试图从登录页面内部监听$ 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');
}
}
})();
但在用户导航到登录页面之前,视图仍会显示。
有人可以帮忙吗?非常感谢提前。
答案 0 :(得分:1)
您可以使用解析功能
$routeProvider.when("/home", {
templateUrl: "views/index.html",
resolve:{
checkLogin: function (sessionService) {
sessionService.redirectIfLogged();
}
}
});
因此,这可确保在呈现视图之前运行检查