AngularJS(1)用于我的UI。 我需要更改默认页面的行为。 如果用户未获得授权,他应该导航到登录页面其他情况 - >特别页面。
配置匿名模块
anonimModule.config(function ($routeProvider, anonimTemplateManager, anonimUrlManager) {
$routeProvider
.when('/', {
templateUrl: anonimTemplateManager.getLoginPath(),
controller: 'loginCtrl'
})
我只能设置一次此行为(例如仅用于登录),但如果用户授权,则无法访问特殊页面。 当(解决我的问题)时,我尝试从访问 $ rootScope - 未成功。
是否可以实现路由的动态行为? 我可以有实例或想法来实现它吗?
答案 0 :(得分:3)
尽量使用。
将它链接起来,就像这样:
.when('/foo', {
templateUrl: 'foo.html',
controller: fooController
)
.when('/bar', {
templateUrl: 'bar.html',
controller: barController
)
.otherwise(
redirect: '/foo'
)
答案 1 :(得分:2)
您还可以写$state.go('/url')
以移至anonimTemplateManager.getLoginPath()
方法中的其他页面。
其他一些相同工作的方法
$location.url();
$state.go('/url')
$window.location.href = '/index.html';
没有尝试过一切。
答案 2 :(得分:2)
您可以使用状态路由,然后您可以使用statechangestart事件,例如: -
.state('user.dashboard', {
templateUrl: 'pages/my/dashboard/deshboard.html',
controller: 'myDashboardController'
url: '/dashboard',
access: {
loginRequired: true
}
然后在app.js中你可以使用$ stateChangeStart和一些auth服务来检查用户是否在authrize访问该状态
$rootScope.$on('$stateChangeStart',
function (event, toState) {
var authorised;
if (toState.access !== undefined) {
authorised = authorizationServie.authorize(toState.name);
if (authorised === false) {
$state.go("loginState");
event.preventDefault();
}
}
});
答案 3 :(得分:1)
当您在应用程序中登录时,将授权数据保存在本地存储中,如果用户未在您的应用程序中登录,您应该检查任何时间状态更改,您的应用程序必须在登录页面中路由或显示警报... 这样做:
var app=angular.module("myApp",["LocalStorageModule"]);
app.run(function($rootScope,$state,localStorageService){
rootScope.$on("$stateChangeSuccess", function (event, toState, parameters, from) {
if(localStorageService.get("authorizationData") !== 'logined')
$state.go("loginPage");
});
}
即使您可以使用stateChangeSuccess事件参数中的变量保存以前的状态,并将其保存在rooScope中以便返回当前状态。