【问题标题】:Infinite loop in State Change Events in angularjsangularjs中状态更改事件中的无限循环
【发布时间】: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


    【解决方案1】:

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

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

    【讨论】:

    • 这是你的问题,OP。如果您已经在 $stateChangeStart 处理程序中并且正在转换到“购物车”状态,则无需手动调用 $state.go('carts',etc,etc)。状态转换已经开始 - 这就是您开始使用 stateChangeHandler 的全部原因。如果您再次手动调用它,您将再次触发 $stateChangeStart 事件,这将再次更改状态,导致 $stateChangeStart 事件在无限循环中再次触发。
    猜你喜欢
    • 2020-07-09
    • 2018-06-09
    • 2018-09-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-06
    • 2021-11-13
    相关资源
    最近更新 更多