angularjs: предотвращение изменения маршрута

Я попытался сделать следующее в своем контроллере:

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

Но это не работает. Разве это не должно быть способом сделать это?


person Sam    schedule 25.04.2013    source источник
comment
Где ты это делаешь? Можете ли вы опубликовать jsfiddle? Возможно, вы захотите сделать это в $rootScope. Я бы предложил поместить его туда, где само приложение загружается. Опубликуйте jsFiddle, и я постараюсь исправить это для вас.   -  person Chris Nicola    schedule 14.10.2013
comment
мило с вашей стороны, но в итоге я использовал ui-router, поэтому вместо этого мне пришлось использовать $stateChangeStart, который просто работает.   -  person Sam    schedule 14.10.2013


Ответы (2)


Я бы поставил на ваши ссылки директиву, которую нужно подтверждать перед изменением маршрута. Я просто прототипировал его в 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/

Проверьте и попробуйте.

С уважением

person kfis    schedule 25.04.2013
comment
Это хорошо, но это не то, что я ищу. Мне нужно следить за изменением маршрута. Это включает в себя, когда пользователь нажимает кнопку «Назад» в браузере. - person Sam; 25.04.2013
comment
Вы также можете захотеть зафиксировать все изменения маршрута, и добавление подтверждения к каждой отдельной ссылке не выглядит лучшим способом сделать это. - person andersonvom; 29.05.2013

В итоге я использовал ui-router, так что я это делаю так:

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

и это работает.

person Sam    schedule 14.10.2013