urlRouteProvider.otherwise导致角度无限循环

时间:2015-08-20 11:59:51

标签: angularjs

我的角应用程序中的路由如下所示:

.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状态,则不会发生这种情况。

我该如何解决这个问题?老实说,我已经尝试过几乎所有东西,但却无法对其进行排序。

1 个答案:

答案 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状态。