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:最大调用堆栈大小超过错误。
为什么会发生这种情况?如果我想由于角度事件中的条件而改变状态,那么解决方案是什么?我可以阅读什么样的文件来理解发生这种事件时发生的事情。
这是你的问题,OP。如果您已经在$ stateChangeStart处理程序中并且正在转换到“carts”状态,则不需要手动调用'$ state.go('carts'等等)'。状态转换已经开始 - 这就是你处于stateChangeHandler开始的全部原因。如果再次手动调用它,则会使$ stateChangeStart事件再次触发,这将改变状态AGAIN,导致$ stateChangeStart事件在无限循环中再次触发。 – matmo
@matmo谢谢你是对的 –