ui路由器恢复已阻止事件



我希望用户在导航到另一个页面时得到通知,他们必须保存更改。因此,我监听UI-ROUTER的stateChangeStart事件。我需要防止下一页在保存值之前不加载值的事件。当我通过$state.go(..)手动导航到所需页面时,我一直挂在stateChangeStart Events 的循环中

$scope.$on('$stateChangeStart', function(event, toState, toParams, fromState, fromParams){
    event.preventDefault(); 
    var confirmPopup = $ionicPopup.confirm({
        ....
    });
    confirmPopup.then(function(res){
        ....
        }
        $ionicNavBarDelegate.back();
    });
}); 

如何记录stateChangeStart事件?

编辑:

$urlRouter.sync();
$state.go(toState.name, {id:toParams.id}, {reload: false});

保持在循环内。

$urlRouter.sync()

返回null。

触发更新;当地址栏url更改,又名$locationChangeSuccess。当您需要对$locationChangeSuccess事件使用preventDefault(),执行一些自定义逻辑(路由保护、身份验证、配置、,重定向等),然后通过调用$urlRouter.sync().

请参阅文档。

urlRouter.sync()的使用非常明显,如果你查看文档,如果你想转到另一个状态或想在转换之间检查一些东西,你也可以这样做来防止重定向循环:

var nextState = null;
$rootScope.$on('$stateChangeStart', function (event, next, current) {
        if (next.name == nextState) return;
        event.preventDefault();
        nextState = next.name;
        $state.go(next.name);
});

最新更新