嗨,我才刚刚开始学习angular && angular-ui-router,并试图弄清楚如何确定何时首次打开该应用程序以将用户发送到登录页面或主页。
这是我到目前为止所拥有的:
codeArtApp.config(function($stateProvider, $urlRouterProvider){
$stateProvider
.state('login',{
url : '/login',
templateUrl:'App/scripts/login/loginView.html',
controller: 'loginCtrl'
})
.state('profile', {
url : '/profile',
templateUrl:'App/scripts/login/loginView.html',
controller: 'profileCtrl'
})
.state('404', {
url: '/404',
templateUrl:'App/scripts/views/404.html'
});
$urlRouterProvider.otherwise("404");
});
codeArtApp.run(['$state', '$rootScope', function($state, $rootScope, $log){
$rootScope.$on('$stateChangeStart', function(event, toState, toParams, fromState){
if(fromState.url === '^' && toState.url !== 'login'){
$state.go('login');
}
});
}]);
我在这里假设的是,如果fromState.url
将设置为,^
则该应用程序将首次启动。
由于某种原因,这段代码进入了一个无限循环,我对此栈进行了跟踪:
现在,从我可以知道发生这种情况的原因是,如果$state.go('login')
被执行的事件toState.url
始终为404。
我曾希望如果$state.go('login')
将要执行的获取toState.url
设置为登录,并且该调用将不再执行。
我可能没有在正确的地方设置此逻辑...
谁能告诉我在Angular中如何有条件地显示页面?
有一个指向工作的punker的链接,主要更改如代码所示:
codeArtApp.run(['$state', '$rootScope',
function($state, $rootScope, $log) {
$rootScope.$on('$stateChangeStart',
function(event, toState, toParams, fromState) {
// instead of
// toState.url !== 'login'
// we compare
// toState.name !== 'login'
var shouldLogin = fromState.url === '^'
&& toState.name !== 'login';
if(shouldLogin)
{
// this way we stop current execution
event.preventDefault();
// and navigate to login
$state.go('login');
}
});
}
]);
在toState.url
将包含URL,即'/login'
代替'login'
。另请检查:状态更改事件以了解有关的更多信息event.preventDefault();
。显示以上内容的活塞...
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句