AngularJS中$timeout和$interval的用法詳解

1. 先將$interval,$timeout,做爲參數注入到controller中,例如rds.controller('controllerCtrl', ['app', '$scope','$http','$routeParams','$filter','$location','$interval','$timeout',javascript

    function (app, $scope,$http,$routeParams,$filter,$location,$interval,$timeout) {
2.在須要用的地方寫上該方法 例如 $scope.timer = $interval( function(){
    $scope.backup("1");
}, 10000);
一開始覺得是把須要調用的方法直接寫在function(){}的位置,發現方法走到定時器時直接執行了該方法並無循環執行,後來發現須要把須要調用的方法寫在function內,10000表示10秒循環一次.若是要定義循環次數 只須要寫成以下這樣 $scope.timer = $interval( function(){
    $scope.backup("1");
}, 10000,3); 3表明循環3次就自動中止循環了.
3.終止定時器 $interval.cancel($scope.timer);
4.$timeout的用法也相似 ,只是$timeout是延遲多少秒後循環一次,而$interval是每隔多少秒循環一次,若是不終止就一直循環
下面是摘自博客 比較高大上的介紹

intervalhtml

window.setInterval的Angular包裝形式。Fn是每次延遲時間後被執行的函數。java

間隔函數的返回值是一個承諾。這個承諾將在每一個間隔刻度被通知,而且到達規定迭代次數後被取消,若是迭代次數未定義,則無限制的執行。通知的值將是運行的迭代次數。取消一個間隔,調用$intreval.cancel(promise)。promise

備註:當你執行完這項服務後應該把它銷燬。特別是當controller或者directive元素被銷燬時而$interval未被銷燬。你應該考慮到在適當的時候取消interval事件。瀏覽器

使用:$interval(fn,delay,[count],[invokeApply],[Pass]);微信

fn:一個將被反覆執行的函數。app

delay:每次調用的間隔毫秒數值。函數

count:循環次數的數值,若是沒設置,則無限制循環。oop

invokeApply:若是設置爲false,則避開髒值檢查,不然將調用$apply。spa

Pass:函數的附加參數。

方法

cancel(promise);

取消與承諾相關聯的任務。

promise:$interval函數的返回值。

使用代碼:

複製代碼
  (function () {
    angular.module("Demo", [])
    .controller("testCtrl",["$interval",testCtrl]);
    function testCtrl($interval){
      var toDo = function () {
          console.log("Hello World");
      };
      $interval(toDo, 3000, 10);
    };
  }());
複製代碼

$timeout

window.setTimeout的Angular包裝形式。Fn函數包裝成一個try/catch塊,表明$exceptionHandler服務裏的任何異常。

timeout函數的返回值是一個promise,當到達設置的超時時間時,這個承諾將被解決,並執行timeout函數。

須要取消timeout,須要調用$timeout.cancel(promise);

使用: $timeout(fn,[delay],[invokeApply]);

fn:一個將被延遲執行的函數。

delay:延遲的時間(毫秒)。

invokeApply:若是設置爲false,則跳過髒值檢測,不然將調用$apply。

方法

cancel(promise);

取消與承諾相關聯的任務。這個的結果是,承諾將被以摒棄方式來解決。

promise:$timeout函數返回的承諾。

複製代碼
  (function () {
    angular.module("Demo", [])
    .controller("testCtrl",["$timeout",testCtrl]);
    function testCtrl($timeout){
      var toDo = function () {
          console.log("Hello World");
      };
      $timeout(toDo,5000)
    };
  }());
複製代碼

大體使用方法能夠和原生js的setInterval和setTimeout那樣使用,一些使用小技巧能夠用在瀏覽器單線程的事件執行方面...  詳情推薦看破狼的文章「JavaScript單線程和瀏覽器事件循環簡述」,也能夠關注其微信公衆號["shuang_lang_shuo"],裏面有不少不錯的文章。

 


        
相關文章
相關標籤/搜索