2013-04-25 87 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