urlRouteProvider.否则会导致角的无限循环



我的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状态。

最新更新