我的角应用程序中的路由如下所示:
.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状态并跳转到Deployment状态。
Login.html
<form name="loginform" ng-if="showForm()"></form>
$ scope.showForm看起来像这样:
$scope.showForm = function(){
console.log("called")
if($localStorage.userInfo === null || $localStorage.userInfo === undefined){
return true;
}else{
$scope.signInUser();
return false;
}
}
但问题是$ scope.showForm继续被调用。
但是,如果我将urlRouterProvider.otherwise更改为Deployment状态,则不会发生这种情况。
我该如何解决这个问题?老实说,我已经尝试过几乎所有东西,但却无法对其进行排序。
答案 0 :(得分:1)
ngIf
周期都会调用 digest
指令。因此,我建议您在showForm
状态的ngIf
事件中执行此操作,而不是在onEnter
指令中调用Login
函数。
$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
状态。