2013-05-18 5 views
3

У меня есть некоторый код, как это:AngularJS: как предотвратить событиеDefault() после завершения обещания?

$scope.$on("$locationChangeStart", function(event, newPath, oldPath) { 

    // Do some sync checks 
    if (!$scope.isPageAllowed($location.path())) 
    { 
     // Prevent default for some reason 
     event.preventDefault(); 
    } 
}); 

Когда я пытаюсь решить promises как это:

$scope.$on("$locationChangeStart", function(event, newPath, oldPath) { 

    // Do some async checks 
    $scope.fooPromises().then(function (data) { 

     // Prevent default for some reason when promises resolved (only if resolved) 
     event.preventDefault(); 
    }); 
}); 

Я получил преуспевающий event (из-за выполнение асинхронного) и через некоторое время предотвращено event когда promises разрешаются.

Есть ли способ связать event с моим promises, так что это будет предотвращено точно после того,

ответ

6

Извините, это не сработает :-). События являются чисто синхронными.

Вы ищете $ route.resolve. Асинхронное разрешение/отклонение маршрутов, предоставление данных контроллера или просто проверка чего-либо.

http://www.egghead.io/video/Kr1qZ8Ik9G8

+0

Спасибо за ваш ответ @ ANDY-Джослины, я нашел это решение, но есть проблема с местом. Когда я отвергаю обещание, никакие действия не срабатывали, как ожидалось, но URL-адрес все еще изменяется. Вот почему я рассматриваю событие $ locationChangeStart - он срабатывает точно до того, как изменился путь пути, чтобы я мог предотвратить URL-адрес из визуальных изменений (без мерцания). Если есть случай, когда решение об отказе также может предотвратить изменение URL-адреса, ваша помощь будет высоко оценена. (Извините за плохой английский, если да) – FelikZ

+0

любая помощь? – FelikZ

+0

Привет, Феликс, извините за опоздание. Событие $ routeChangeError даст вам предыдущие и попытки объекты маршрута в качестве параметров. Вы можете получить путь предыдущего маршрута от предыдущего объекта маршрута и перенаправить пользователя туда, используя '$ location.path()', и отобразить сообщение об ошибке. –

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