2016-09-16 53 views
-1

我有以下代码。它会检查每几分钟轮询一次服务器的工厂。它工作正常,但我想在打开模式时暂停“fetchDataContinously”方法,并在模式关闭时恢复它。总之,我需要找到一种方法来打开和关闭模态时切换“fetchDataContinously”。请告知,或者如果我的问题不清楚,请告诉我。

angular.module('NavBar', []).controller('NavBarCtrl', function NavBarCtrl($scope,$modal,$timeout,MyPollingService) { 

    var ctrl = this; 
    fetchDataContinously(); 

    function fetchDataContinously() { 
     MyPollingService.poll().then(function(data) { 


     if(data.response[0].messages[0].important_popup){ 
      ctrl.showImportantNotice(data.response[0].messages[0]); 
      return; 
     } 
     $timeout(fetchDataContinously, 3000); 
     }); 
    } 
    ctrl.showNotices = function() { 
     var noticesModalOptions = { 
      templateUrl: "notices.html", 
      controller: "NoticesCtrl", 
      controllerAs: "ctrl", 
      show: true, 
      scope: $scope, 
      resolve: { 
       notices: function(NoticesFactory) { 
        return NoticesFactory.getMessages(); 
       } 
      } 
     } 

     var myNoticesModal = $modal(noticesModalOptions); 
     myNoticesModal.$promise.then(myNoticesModal.show); 
    } 

    ctrl.showImportantNotice = function (importantNotice) { 
    ctrl.importantNotice = importantNotice; 
    var importantNoticeModalOptions = { 
     templateUrl: "/importantNotice.html", 
     controller: "ImportantNoticeCtrl", 
     controllerAs: "ctrl", 
     show: true, 
     scope: $scope, 
     onHide: function() { 
      console.log("Close !"); 
      fetchDataContinously(); 
     }, 
     onShow: function() { 
      console.log("Open !"); 
     } 
    } 

    var myImportantNoticeModal = $modal(importantNoticeModalOptions); 
    myImportantNoticeModal.$promise.then(myImportantNoticeModal.show); 
} 

})

+0

对,所以,当模式打开时,取消超时,然后当它关闭时,重新启动它。 –

+0

我认为那是我迷路的地方。我怎样才能从fetchDataContinously函数外部取消$超时...例如,我怎么能在importantNoticeModalOptions.onHide – defaultcheckbox

+1

内部执行它,我甚至没有看到在你的代码中调用$ timeout – charlietfl

回答

1

裹在功能上你$timeout并返回它的承诺

var timer; 
function startPolling(){ 
    return $timeout(pollData, 3000); 
} 
// start it up 
timer = startPolling(); 

取消:

$timeout.cancel(timer); 

然后重新开始:

timer = startPolling();