2013-04-25 3 views
5

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

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

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

+0

Где вы это? Можете ли вы опубликовать jsfiddle? Вероятно, вы захотите сделать это на $ rootScope. Я бы предложил разместить его там, где находится сама загрузочная программа. Отправьте jsFiddle, и я попытаюсь исправить это для вас. –

+0

милый из вас, но я закончил использовать ui-router, поэтому мне пришлось использовать вместо этого $ stateChangeStart, который просто работает. – Sam

ответ

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

+0

Вы также можете просмотреть все изменения маршрута, и добавление подтверждения для каждой отдельной ссылки просто не похоже на лучший способ сделать это. – andersonvom

Смежные вопросы