use*_*349 6 angularjs angular-ui-router
我正在使用MEAN.JS(不是.IO)提供的样板MEAN开始一个新项目.
我是ui-router的新手,我无法弄清楚如何完成这个场景:
以下是路由提供商目前的样子:
angular.module('core').config(['$stateProvider', '$urlRouterProvider',
function($stateProvider, $urlRouterProvider) {
// Redirect to home view when route not found
$urlRouterProvider.otherwise('/');
// Home state routing
$stateProvider.
state('home', {
url: '/',
abstract: true
}).
state('home.loggedOut', {
templateUrl: 'modules/core/views/home.client.view.html'
}).
state('home.loggedIn', {
templateUrl: 'modules/core/views/dashboard.client.view.html'
});
}
]);
Run Code Online (Sandbox Code Playgroud)
我正在寻找类似db语言中的预保存挂钩来确定要转到哪个状态.那会是什么样子?
有一个plunker提供了如上所述的行为。首先,状态定义发生了变化,将url抽象状态移至两个子状态,并引入登录状态以供以后检查:
// Redirect to home view when route not found
$urlRouterProvider.otherwise('/');
// Home state routing
$stateProvider.
state('home', {
//url: '/',
abstract: true,
template: '<div ui-view=""></div>',
}).
state('home.loggedOut', {
url: '/',
...
}).
state('home.loggedIn', {
url: '/',
...
})
.state('logon', {
url: '/logon',
templateUrl: 'tpl.logon.html',
controller: 'LogonCtrl',
});
Run Code Online (Sandbox Code Playgroud)
我们现在所拥有的是具有相同 url 的 2 个状态的定义。第一个将被视为默认值..并使用。
现在,我们必须引入一个状态更改观察器,它将根据 AuthSvc 设置isLoggedIn重定向到正确的子状态:
.run(['$rootScope', '$state', 'AuthSvc',
function($rootScope, $state, AuthSvc) {
$rootScope.$on('$stateChangeStart', function(event, toState, toParams
, fromState, fromParams) {
// logged out is logged out
var doRedirectToLoggedOut = !AuthSvc.isLoggedIn
&& toState.name === "home.loggedIn";
if (doRedirectToLoggedOut) {
event.preventDefault();
$state.go("home.loggedOut");
}
// logged in is logged in
var doRedirectToLoggedIn = AuthSvc.isLoggedIn
&& toState.name === "home.loggedOut";
if (doRedirectToLoggedIn) {
event.preventDefault();
$state.go("home.loggedIn");
}
});
}])
Run Code Online (Sandbox Code Playgroud)
正如此示例所示,在我们更改isLoggedIn(单击登录链接)之前,我们会被重定向到正确的子状态...即使我们想查看其他状态
| 归档时间: |
|
| 查看次数: |
3323 次 |
| 最近记录: |