2016-09-16 2 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関数の外側から$タイムアウトを取り消すにはどうすればいいですか?たとえば、importantAttributeModalOptions.onHide内でどのようにすればいいですか? – defaultcheckbox

+1

コードで$タイムアウトが呼び出されていないことがあります。 – charlietfl

答えて

1

機能であなたの$timeoutをラップし、それをキャンセルすることを約束

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

のリターン:

$timeout.cancel(timer); 

を再度開始するには:

timer = startPolling(); 
関連する問題