【问题标题】:AngularJS $interval dont stop on .cancel();AngularJS $interval 不要停在 .cancel();
【发布时间】:2019-07-23 13:01:01
【问题描述】:

我在 AngularJS 中有 SPA 多视图应用程序,我定义了从另一个视图控制器启动的 $interval。当我单击带有调用函数的 btn 和行 $interval.cancel();在里面,它不会停止。

以下是我的代码示例:

主控制器:

 $scope.$on("startInterval", function () {
    $interval(function warningsControl() {
        console.log("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
        });
    }
}

还有 SecondController:

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

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

此代码开始间隔,一切运行正常,直到我点击注销 btn - 除了停止间隔之外,它完成了一切。

任何想法如何解决它?我将不胜感激。

【问题讨论】:

  • 我之前看过它,我发现 $interval.cancel() 行用于停止间隔,但它在我的代码中不起作用,我在那里找不到我的问题的任何答案。
  • 从linked dupe中的答案来看,需要存储区间并传递给cancel()。 “不起作用”没有帮助;您是否在控制台中收到任何错误消息?
  • 控制台没有错误(除了那些,程序在没有登录用户的情况下调用服务器 - $interval 仍在运行但它不应该)。但多亏了 Quantum 的回答,我成功了。

标签: javascript angularjs html setinterval


【解决方案1】:

$interval 函数应该返回某种可以传递给 $interval.cancel() 的 ID。例如:

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

【讨论】:

  • 非常感谢,我忘记将 $interval 保存在变量中,然后将其发送到取消函数。这完全归功于我对 $interval 的误解。
猜你喜欢
  • 2016-05-13
  • 2015-10-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-02-23
  • 1970-01-01
  • 2014-09-15
  • 1970-01-01
相关资源
最近更新 更多