AngularJS $interval не останавливаться на .cancel();

У меня есть приложение SPA с несколькими представлениями в AngularJS, я определил $interval, который запускается из другого контроллера представления. Когда я нажимаю кнопку с вызванной функцией и строкой $interval.cancel(); в нем он не останавливается.

Вот примеры моего кода:

ГлавныйКонтроллер:

 $scope.$on("startInterval", function () {
    $interval(function warningsControl() {
        console.info("Timer stamp!");

        $.ajax({
            // some web api call which works fine
        })
    }, 10000);
});

$scope.stop = function () {
    $interval.cancel();
}

$scope.logoutButton = {
    text: "Logout",
    type: "normal",
    visible: false,
    onClick: function () {

        // some working code

        $scope.stop();

        var logoutBtn = $("#logout-btn").dxButton("instance");
        logoutBtn.option({
            visible: false
        });
    }
}

И ВторойКонтроллер:

$scope.authenticateButton = {
    type: "default",
    text: "Log In",
    onClick: function () {

        $.ajax({
            // some web api calling
            success: (data) => {
                // some working code
                $rootScope.$broadcast("startInterval");
            }
        })
    }
}

Этот код запускает интервал, и все работает нормально, пока я не нажму кнопку «Выход из системы» - он сделал все, кроме остановки интервала.

Есть идеи, как это исправить? Буду признателен за совет.

Возможный дубликат Как очистить или остановить timeInterval в angularjs?

Anurag Srivastava 01.03.2019 14:24

Я смотрел на это раньше, там я обнаружил, что строка $interval.cancel() используется для остановки интервала, но она не работает в моем коде, и я не смог найти там никакого ответа на мою проблему.

David Bašta 01.03.2019 14:28

Судя по ответу в связанном дубликате, вам нужно сохранить интервал и передать его cancel(). «Не работает» не помогает; вы получаете какие-либо сообщения об ошибках в консоли?

Chris G 01.03.2019 14:31

Консоль без ошибок (за исключением тех, где программа вызывает сервер без авторизованного пользователя - $interval все еще работает, но не должен). Но благодаря ответу Quantum мне удалось это сделать.

David Bašta 04.03.2019 07:25
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
4
323
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Функция $interval должна возвращать какой-то идентификатор, который вы можете передать в $interval.cancel(). Например:

var int_id = $interval( func, time )
//...later...
$interval.cancel(int_id)

Большое спасибо, я забыл сохранить $interval в переменной, а затем отправить его в функцию отмены. Это произошло из-за моего непонимания $interval вообще.

David Bašta 04.03.2019 07:23

Другие вопросы по теме