2016-07-27 2 views
0

Я хочу, чтобы изменить состояние из «mycarts» государства «телег» государства. так что я использовал $ stateChangeStart angularjs события в «mycarts» контроллер и установить условие, если состоянием вы собираетесь из «mycarts» состояния является «телега» состояние так идет в состоянии тележки.Бесконечный цикл в изменении состояния События в 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 и вы переходите в состояние «тележки», вам не нужно вручную вызывать '$ state.go ('carts' и т. Д. И т. Д.). Переход состояния уже запущен - вот и вся причина, по которой вы находитесь в stateChangeHandler. Если вы снова вызовете его вручную, вы будете запускать событие $ stateChangeStart AGAIN, которое изменит состояние AGAIN, в результате чего событие $ stateChangeStart запускает AGAIN в бесконечном цикле. – matmo

+0

@matmo спасибо, что ты прав –

 Смежные вопросы

  • Нет связанных вопросов^_^