关闭模式时如何停止 $interval ($uibModal)

Posted

技术标签:

【中文标题】关闭模式时如何停止 $interval ($uibModal)【英文标题】:how to stop $interval when closing the modal ($uibModal) 【发布时间】:2018-08-01 12:33:29 【问题描述】:

我做了一个间隔: $interval($scope.sendGetRequest, 1500) 该函数每 1500 毫秒发送一次 $http.get 请求。我想在关闭模态时停止这个间隔,因为即使我关闭模态,它仍然在间隔内发送请求。

模态关闭时触发的事件是什么,所以我可以在那里停止间隔?

** 我在模态范围内,我想在模态关闭之前停止间隔。

【问题讨论】:

【参考方案1】:

您可能希望在 $scope 被破坏(模式关闭)时停止 $interval。

这应该在你的模态控制器内部:

  var poll = $interval($scope.sendGetRequest, 1500);
  $scope.$on('$destroy', stopPolling);

  function stopPolling() 
      $interval.cancel(poll);
  ;        

【讨论】:

如果这个答案解决了您的问题,那么最好接受它作为答案。【参考方案2】:

您必须将间隔定义存储在变量中。

var myInterval = $interval(function() 
  // Do something
, 1500);

然后当你想停止它时,使用$intervalcancel方法。

$interval.cancel(myInterval);

Documentation

【讨论】:

【参考方案3】:

在您的控制器中:

$scope.openDialog = function () 
    var dialogIns = function () 
        var dialogInstance = $uibModal.open(
            animation: true,
            templateUrl: 'modalhtmlPage.html',
            controller: 'modalController',
        );
    ;

在你的模态控制器中:

var intVal = $interval(function () 
    //$http.get request
, 1500);

$scope.closeModal = function () 
       $interval.cancel(intVal);
       $uibModalInstance.close();
    

【讨论】:

间隔发生在模态内部,它们不共享相同的范围。我想在退出之前停止模态范围内的间隔。

以上是关于关闭模式时如何停止 $interval ($uibModal)的主要内容,如果未能解决你的问题,请参考以下文章

窗口关闭时停止模式(可可)

检测 uib-popover 何时打开和关闭?

使用 uib-accordion 的条件标题颜色

在关闭模式时停止视频?

如何接收应用程序停止或设备关闭时发送的 GCM 推送通知?

关于VB Timer运行的问题