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