状态变化中的无限循环angularjs中的事件

时间:2016-07-27 19:03:58

标签: angularjs events state infinite-loop

我想将状态从" mycarts" 状态更改为" carts" 状态。所以我在" mycarts"中使用了$ stateChangeStart angularjs事件。控制器并设置一个条件,如果您要来自" mycarts"州"购物车"状态所以去购物车状态。

以下是我的控制器中的角度事件

        $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:超出最大调用堆栈大小错误。

为什么会这样?如果我想因为角度事件中的条件而改变状态,那么解决方案是什么?我可以阅读什么样的文件来了解当这样的事件发生时究竟发生了什么。

1 个答案:

答案 0 :(得分:1)

如果他已经进入购物车状态,你为什么要这样做? :

$state.go('carts', fromParams, true);