2013-04-25 95 views
5

我试着做在我的控制器以下几点:angularjs:防止路由变化

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

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

+0

你在做什么?你可以发布一个jsfiddle吗?您可能想要在$ rootScope上执行此操作。我建议把它放在你的应用程序引导程序本身的位置。发布一个jsFiddle,我会尽力为你解决它。 – 2013-10-14 17:58:20

+0

不错,但我最终使用UI路由器,所以我不得不使用$ stateChangeStart,而只是工作。 – Sam 2013-10-14 18:31:57

回答

0

我结束了使用ui-router,所以我做的方式是:

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

和它的作品。

0

我会在你的链接上加一条指令,在更改路由之前应该确认。 我刚刚在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/

检查和尝试。

问候

+1

这很好,但它不是我要找的。我需要观察路线变化。这包括用户何时点击浏览器的后退按钮。 – Sam 2013-04-25 11:45:37

+0

您可能还想要捕获所有路线更改,并且向每条链接添加确认并不是最好的方式。 – andersonvom 2013-05-29 17:39:36