【问题标题】:JS how to continue event prevent defaultJS如何继续事件防止默认
【发布时间】:2018-11-11 13:31:32
【问题描述】:

我正在尝试弹出模式询问用户是否确定要离开页面, 虽然还有尚未提交的更改。

这些更改不是使用<form> 元素完成的,而是一些更改 是在特定对象上制作的。

我试图检测他何时尝试使用$routeChangeStart 离开页面 和 $routeChangeSuccess 这样的:

$scope.$on('$routeChangeStart', function(event, current) {
  event.preventDefault();
  ConfirmationModal.fire("Do you sure?", response => {
    if (response) {
      // how to CONTINUE the prevent default??
    }
  });
}

上面的代码实际上停止了传播并且不让用户离开 这页纸。

但是 - 在确认模式后,我找不到任何方法来继续页面移动。 我的意思是,我可以阻止默认但不能继续默认。

我也尝试过:

$location.path(PATH) 但这不起作用。

此外 - 即使用户再次点击离开页面 - 事件 preventdefault 仍然存在 预防。

【问题讨论】:

    标签: javascript angularjs angular-ui-router preventdefault


    【解决方案1】:

    你可以添加一个标志和一个条件:

    类似

    $scope.allowChange = false;
    
    $scope.$on('$routeChangeStart', function(event, current) {
      // don't do anything when allowChange  === true
      if (!$scope.allowChange) {
        event.preventDefault();
        ConfirmationModal.fire("Do you sure?", response => {
          if (response) {
            $scope.allowChange = true
            $location.path(...) // I forget prop to get new path from
          }
        });
      }
    
    })
    

    【讨论】:

    • 很好用 - 所以事件阻止默认值将始终保持活动状态,直到它的关闭 IF 得到 false?顺便说一句,在next 我有这个:http://localhost:8080/#!/root/settings/permissions 如何用这个加载下一个视图?我应该只解析路径并提取它,还是还有别的?
    • 正如我评论的那样,我忘记了哪个对象中有下一条路径。如果我没看文档我没记错的话,还有一个 next 参数,其中包含新路径。在路由文档中进行了概述
    • 是的,接下来提供完整的url
    • 不也有内部路径和完整的url吗?如果不是,那么从完整的解析中获取它或者尝试$location.url(fullUrl)
    • 不。如果有帮助,我正在使用 ngRoute。
    猜你喜欢
    • 2012-12-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多