【发布时间】:2016-07-27 19:03:58
【问题描述】:
我想将状态从 "mycarts" 状态更改为 "carts" 状态。所以我在 "mycarts" 控制器 中使用了 $stateChangeStart angularjs 事件,并设置一个条件,如果您要从 "mycarts" state 进入的状态是 "carts" state 所以进入购物车状态。
这是我的控制器中的 角度事件:
$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 RangeError: Maximum call stack size exceeded 错误。
为什么会这样?如果我想由于角度事件中的条件而改变状态,解决方案是什么?以及我可以阅读什么样的文件来了解当这样的事件发生时到底发生了什么。
【问题讨论】:
标签: angularjs events state infinite-loop