2016-07-27 43 views
0

我想将状态从“mycarts”状态更改为“carts”状态。所以我用$ stateChangeStart angularjs事件“mycarts”控制器并设定一个条件,如果你是从“mycarts”状态去的状态是“大车”状态所以去推车状态。无限循环中的状态变化事件in angularjs

这里是我的控制器我角事件

 $scope.$on('$stateChangeStart', function (event, toState, toParams, fromState, fromParams) { 
     if (toState.name === 'carts' && fromState.name === 'mycarts') { 
      $state.go('carts', fromParams, true); 
      event.preventDefault(); 
      return; 
     } 
     if (toState.name === 'mycarts' && fromState.name === 'mycarts') {    
      //Nothing 
     } else { 
      $rootScope.selectedItemsMyCarts = undefined; 
     } 
    }); 

我的代码会被卡在:

if (toState.name === 'carts' && fromState.name === 'mycarts') { 
     $state.go('carts', fromParams, true); 
     event.preventDefault(); 
     return; 
} 

这是我在app.js状态

.state('mycarts', { 
     url : '/mycarts/:type/:vendor?vendors&price_to&price_from&manufacturer&editor&theme&page&order&filter_by&no', 
     params: { 
        type: {squash: true, value: null}, 
        vendor: {squash: true, value: null} 
       },templateUrl : 'partials/mycarts.html', 
     controller : 'MyCartsController' 
    }).state('carts', { 
     url : '/carts/:id?vendors&price_to&price_from&manufacturer&editor&theme&page&order&no', 
     templateUrl : 'partials/carts.html', 
     controller : 'CartsController' 
    } 

而我得到angular.js:12416 RangeEr ror:最大调用堆栈大小超过错误。

为什么会发生这种情况?如果我想由于角度事件中的条件而改变状态,那么解决方案是什么?我可以阅读什么样的文件来理解发生这种事件时发生的事情。

回答

1

如果他已经去购物车状态,为什么你这样做? :

$state.go('carts', fromParams, true); 
+1

这是你的问题,OP。如果您已经在$ stateChangeStart处理程序中并且正在转换到“carts”状态,则不需要手动调用'$ state.go('carts'等等)'。状态转换已经开始 - 这就是你处于stateChangeHandler开始的全部原因。如果再次手动调用它,则会使$ stateChangeStart事件再次触发,这将改变状态AGAIN,导致$ stateChangeStart事件在无限循环中再次触发。 – matmo

+0

@matmo谢谢你是对的 –