У меня есть некоторый код, как это: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
, так что это будет предотвращено точно после того,
Спасибо за ваш ответ @ ANDY-Джослины, я нашел это решение, но есть проблема с местом. Когда я отвергаю обещание, никакие действия не срабатывали, как ожидалось, но URL-адрес все еще изменяется. Вот почему я рассматриваю событие $ locationChangeStart - он срабатывает точно до того, как изменился путь пути, чтобы я мог предотвратить URL-адрес из визуальных изменений (без мерцания). Если есть случай, когда решение об отказе также может предотвратить изменение URL-адреса, ваша помощь будет высоко оценена. (Извините за плохой английский, если да) – FelikZ
любая помощь? – FelikZ
Привет, Феликс, извините за опоздание. Событие $ routeChangeError даст вам предыдущие и попытки объекты маршрута в качестве параметров. Вы можете получить путь предыдущего маршрута от предыдущего объекта маршрута и перенаправить пользователя туда, используя '$ location.path()', и отобразить сообщение об ошибке. –