Ich möchte den Status von "Mycarts" Zustand zu "Wagen" Zustand ändern. so habe ich $ stateChangeStart AngularJS Ereignis in „mycarts“ Controller und einen Zustand gesetzt, wenn der Zustand, den Sie von „mycarts“ Zustand gehen„Karren“ Zustand ist so auf den Karren Zustand gehen.Endlosschleife in Zustandsänderungsereignisse in angularjs
Hier ist meine Winkel Ereignis in meinem Controller:
$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;
}
});
werden Mein Code in geklebt werden:
if (toState.name === 'carts' && fromState.name === 'mycarts') {
$state.go('carts', fromParams, true);
event.preventDefault();
return;
}
Hier ist in app.js mein Zustand
.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'
}
Und ich bekomme angular.js: 12416 RangeEr ror: Die maximale Call-Stack-Größe hat überschritten.
warum passiert das? Und was ist die Lösung, wenn ich einen Zustand aufgrund einer Bedingung im eckigen Ereignis ändern möchte? Und welche Art von Dokumenten kann ich lesen, um zu verstehen, was genau passiert, wenn solche Ereignisse passieren.
Das ist Ihr Problem, OP. Wenn Sie sich bereits im Handler $ stateChangeStart befinden und in den Status 'Wagen' wechseln, müssen Sie '$ state.go ('Wagen' usw.) nicht manuell aufrufen '. Der Statusübergang ist bereits gestartet - das ist der Grund, warum Sie sich im stateChangeHandler befinden. Wenn Sie es erneut manuell aufrufen, wird das $ stateChangeStart-Ereignis erneut ausgelöst, wodurch der Status AGAIN geändert wird, wodurch das $ stateChangeStart-Ereignis in einer Endlosschleife ausgelöst wird. – matmo
@matmo danke, du hast recht –