angularjs:防止路由更改

angularjs:防止路由更改,angularjs,angularjs-controller,Angularjs,Angularjs Controller,我已尝试在控制器中执行以下操作: $scope.$on("$routeChangeStart", function (event, next, current) { if (!confirm('are you sure ?')) { event.preventDefault(); } }); 但它不起作用。难道不应该这样做吗 我会在你的链接上添加一条指令,在更改路线之前应该确认。 我只是在JSFIDLE中原型化了它,我

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

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

但它不起作用。难道不应该这样做吗

我会在你的链接上添加一条指令,在更改路线之前应该确认。 我只是在JSFIDLE中原型化了它,我没有测试它。但我认为,这应该是正确的方式

(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));

检查并尝试一下


关于

我最终使用了ui路由器,因此我的做法是:

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

这很好,但这不是我想要的。我需要注意路线的变化。这包括当用户点击浏览器的后退按钮时。您可能还希望捕获所有路线更改,并且向每个链接添加确认看起来并不是最好的方法。您在哪里这样做?你能发布一个JSFIDLE吗?您可能希望在$rootScope上执行此操作。我建议把它放在你的应用程序引导程序本身的地方。发布一个JSFIDLE,我会尝试为您修复它。您真好,但我最终使用了ui路由器,所以我不得不使用$stateChangeStart,这很有效。