我的angular应用中的路由是这样的:
.config(function($stateProvider,$urlRouterProvider){
$stateProvider
.state('Login',{
url:'/login',
templateUrl:'templates/login.html',
controller:'LoginCtrl'
})
.state('Deployment',{
url:'/deployment',
templateUrl:'templates/deployment.html'
})
.state('Bill',{
url:'/bills',
templateUrl:'templates/bills.html'
})
$urlRouterProvider.otherwise(function ($injector) {
var $state = $injector.get('$state');
$state.go('Login');
});
//This line is the culprit. This does not happen if I change state to go to Deployment but I need it to be Login
});
如果$localstorage有userIfo,我基本上需要跳过登录状态并跳转到部署状态。
Login.html
<form name="loginform" ng-if="showForm()"></form>
美元范围。showForm看起来像这样:
$scope.showForm = function(){
console.log("called")
if($localStorage.userInfo === null || $localStorage.userInfo === undefined){
return true;
}else{
$scope.signInUser();
return false;
}
}
,但问题是$scope。showForm一直被调用
然而,如果我改变了urlRouterProvider,它就不会发生。
如何解决这个问题?老实说,我已经尝试了几乎所有的方法,但还是没有能够排序。
ngIf
指令在每个角digest
循环中被调用。因此,与其在ngIf
指令中调用showForm
函数,我建议您在Login
状态的onEnter
事件中这样做。
$stateProvider
.state('Login',{
url:'/login',
onEnter:["$state","$localStorage",function($state,$localStorage){
if($localStorage.userInfo)
$state.go("Deployment");
}],
templateUrl:'templates/login.html',
controller:'LoginCtrl'
})
虽然有很多其他的(也许更好的)方法来实现这个功能,一个可能是使用父abstract
状态来决定是否将路由发送到Login
状态。