Я использую модуль ngRoute
для обработки нескольких ссылок в однострочном приложении angularJS. Иногда пользователи достигают неправильных ссылок, необходимо перенаправить (поскольку контент динамический, он зависит от внешнего источника, но это не имеет значения).Правильный способ обратного отсчета и перенаправления
Предположим, я хочу перенаправить пользователя через 10 секунд, пока я хочу отобразить предупреждение и показать обратный отсчет. Я просто использовать seconds
переменной начальной формы 10 и функцию с $interval
меньшим количеством секунд до 0, а затем перенаправить
$scope.seconds = 10;
$scope.startCountdown = function() {
var intervalPromise = $interval(function() {
if ($scope.seconds > 0) {
$scope.seconds--;
}
else {
$interval.cancel(intervalPromise);
$location.search({});
$location.path("/");
}
}, 1000);
}
$scope.startCountdown();
Это работает, но когда местоположение изменения пользователя до конца обратного отсчета (он может вызвать $location.path("/Summary")
сверху меню) обратный отсчет продолжается в фоновом режиме, и через несколько секунд он перенаправляется на родину.
Как я могу это решить? Я мог бы использовать событие $scope.$on("$routeChangeSuccess", function (args) { ... }
, чтобы отменить обещание, но в этом случае мне нужно сохранить переменную intervalPromise
и ... похоже, она слишком подключена! Есть ли лучший способ реализовать эту логику обратного отсчета прямо?