2017-02-10 71 views
0

所以這裏是我的腳本,我根本不明白髮生了什麼。Javascript SetInterval執行腳本每隔一個間隔13次

var reloadTableInterval = setInterval(function(){ 
    console.log('ABC'); 
}, 120000); 

當我這樣做時,我注意到每次間隔完成後,它會在控制檯中寫入13次「ABC」。我想知道如果我做錯了什麼?

請注意,此功能是AngularJS(1.3)控制器的一部分。

app.controller('unitCtrl', ['$scope', '$http', '$compile', function($scope, $http, $compile){ 
    //... 
}]); 

另外,我有一個使用我的控制器7的指令,他們都建立了這個方式,但有不同的名稱:

app.directive('clientInfoModal', function() { 
    return { 
     restrict: 'E', 
     replace: true, 
     templateUrl: '/reservations/template/ClientInfoModal.html', 
     controller: 'unitCtrl' 
    }; 
}); 

而且他們在我的HTML文檔的底部加載(這是一個單頁的小應用程序)

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.2.4/jquery.min.js"></script> 
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.6.1/angular.min.js"></script> 
<script src="js/app.js"></script> 
<script src="js/controller/unitController.js"></script> 
<script src="js/directive/saleModal.js"></script> 
<script src="js/directive/reservationModal.js"></script> 
<script src="js/directive/clientInfoModal.js"></script> 
<script src="js/directive/unitsTable.js"></script> 
<script src="js/directive/waitingListModal.js"></script> 
<script src="js/directive/oneUnitWaitingListModal.js"></script> 
<script src="js/directive/newNoteModal.js"></script> 
+6

好像你加載器的13倍。不可能在沒有看到更多上下文的情況下回答 – baao

+0

使用此控制器的每個指令是否加載到我的HTML文檔底部加載控制器的另一個實例? –

+0

出於好奇,你是否在查詢數據?由於reloadTableInterval聽起來很奇特。 – Shilly

回答

0

編輯:基於OP的問題,評論跟帖固定答案

app.service('intervalCheckService', ['$interval', function($interval) { 
    return { 
    intervalRun: false, 
    setInterval: function() { 
     if (!intervalRun) { 
     this.intervalRun = true; 
     var reloadTableInterval = $interval(function() { 
      console.log('ABC'); 
     }, 120000); 
     } 
    } 
    } 
}]); 

將該服務作爲依賴項包含在您的應用中。然後將其注入您的控制器。

app.controller('unitCtrl', ['$scope', '$http', '$compile', 'intervalCheckService', function($scope, $http, $compile, intervalCheckService) { 
    intervalCheckService.setInterval(); 
    //... 
}]); 

角文檔有一個服務的一個很好的例子,以及如果你需要更多的例子:See Here

+2

'$ interval'不會阻止間隔多次啓動。 – JJJ

+0

@JJJ是的,它的行爲相同 –

+0

更改我的答案,與OP在他的問題下的評論中給出的新信息一起工作。看到這裏@YannChabot – matt