2013-04-25 13 views
5

Próbowałem wykonując następujące czynności w moim kontrolera:angularjs: zapobieganie trasy zmienia

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

Ale to nie działa. Czy to nie powinno być sposobem na zrobienie tego?

+0

Gdzie to robisz? Czy możesz napisać jsfiddle? Prawdopodobnie chcesz to zrobić w $ rootScope. Sugerowałbym umieszczenie go w miejscu, w którym znajduje się bootstrap aplikacji. Opublikuj jsFiddle, a spróbuję to dla ciebie naprawić. –

+0

miło z twojej strony, ale skończyło się na używaniu ui-routera, więc zamiast tego użyłem $ stateChangeStart, co po prostu działa. – Sam

Odpowiedz

0

skończyło się używając ui-router, tak jak ja to robię to:

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

i to działa.

0

chciałbym umieścić dyrektywę na linki, które powinny zostać potwierdzone przed zmianą trasy. Po prostu prototypowałem go w JSFiddle, nie przetestowałem go. Ale myślę, że to powinna być właściwa droga.

(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/

Sprawdź i spróbować.

Pozdrowienia

+1

To miło, ale nie tego szukam. Muszę uważać na zmianę trasy. Dotyczy to również sytuacji, gdy użytkownik kliknie przycisk Wstecz w przeglądarce. – Sam

+0

Możesz również chcieć przechwycić wszystkie zmiany trasy, a dodanie każdego pojedynczego linku do potwierdzenia nie jest najlepszym sposobem na zrobienie tego. – andersonvom

Powiązane problemy