【问题标题】:angularjs: preventing route changesangularjs:防止路线更改
【发布时间】:2013-04-25 09:48:31
【问题描述】:

我尝试在我的控制器中执行以下操作:

  $scope.$on("$routeChangeStart", function (event, next, current) {
       if (!confirm('are you sure ?')) {
         event.preventDefault();           
       }
  });

但它不起作用。这不应该是这样做的方式吗?

【问题讨论】:

  • 你在哪里做这个?你可以发布一个jsfiddle吗?您可能希望在 $rootScope 上执行此操作。我建议将它放在您的应用程序引导程序本身的位置。发布一个 jsFiddle,我会尝试为您修复它。
  • 你好,但我最终使用了 ui-router,所以我不得不改用 $stateChangeStart,这样才有效。

标签: angularjs angularjs-controller


【解决方案1】:

我会在您的链接上放置一条指令,在更改路线之前应确认该指令。 我只是在 JSFiddle 中对其进行了原型设计,我没有对其进行测试。但我认为,这应该是正确的方法。

(function (angular) {
  module = angular.module('confirm', []);
  ConfirmDirective = function () {
      return {
        restrict: 'A',
        link: function (scope, elm, attrs, ctrls) {
            angular.element(elm).bind('click', function (event) {
                alert("Sure?");
                event.preventDefault();
                return false; //or true, depends on you
            });
        }
    };
  };
  module.directive("confirm", ConfirmDirective);
}(angular));

http://jsfiddle.net/L6xBF/3/

检查并尝试一下。

问候

【讨论】:

  • 这很好,但这不是我想要的。我需要注意路线变化。这包括当用户点击浏览器的后退按钮时。
  • 您可能还想捕获所有路线更改,并且为每个链接添加确认看起来并不是最好的方法。
【解决方案2】:

我最终使用了ui-router,所以我这样做的方式是:

$scope.$on('$stateChangeStart', function (event) {
     if (!confirm('are you sure ?')) {
         event.preventDefault();
     }
});

它有效。

【讨论】:

    猜你喜欢
    • 2020-04-04
    • 2013-10-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-28
    • 1970-01-01
    • 2013-04-26
    相关资源
    最近更新 更多