您好,登錄后才能下訂單哦!
人們似乎常常將AngularJS中的$timeOut() $interval()函數(shù)看做是一個內(nèi)置的、無須在意的函數(shù)。但是,如果你忘記了$timeOut()$interval()的回調(diào)函數(shù)將會造成非常不好的影響,你可能會因此遇到代碼莫名其妙的出現(xiàn)問題,或者無端拋出一個錯誤甚至是一遍一遍的重復(fù)對的你的服務(wù)器進行$http請求這些詭異的情形。管理好你的$timeOut/$interval定時器的小技巧就是在$destory事件中將它們?nèi)∠?/p>
和JavaScript中原生的setTimeout()以及setInterval()函數(shù)不同,AngularJS中的$timeOut()函數(shù)會返回一個promise。和其他的promise一樣,你可以綁定$timeOut的resolved和rejected時間。然而更重要的是,你可以通過將這個promise傳遞給$timeOut.cancel()方法來取消掉潛在的定時器。
設(shè)置定時任務(wù),給定時任務(wù)起一個名字time_upd,為的是方便清理的時候直接調(diào)用名稱。
var timeout_upd = $interval($scope.upd_data ,6000);
注意:設(shè)置的時候$interval(fn ,time);第一個參數(shù)fn 不能寫“()”,只能寫$scope.方法名稱。第二個參數(shù)是定時執(zhí)行的時間間隔,單位為毫秒。
清除定時任務(wù),AngularJS將會在scope中觸發(fā)$destory事件。這讓我們可以有機會來cancel任何潛在的定時器。
$scope.$on('$destroy',function(){ $interval.cancel(timeout_upd); })
我的頁面是這種格式的,如下圖所示。angularjs在“實時數(shù)據(jù)監(jiān)測”這個模塊設(shè)置了一個定時任務(wù),當我點擊菜單欄到別的頁面時,默認的這個定時任務(wù)還在執(zhí)行,占用很多資源。所以必須得清除這個定時任務(wù),原生的清除window.clearInterval(timeout_upd);是不管用的,必須用angularjs自帶的清除方法,如上代碼所示。
注意:angularjs中設(shè)置了定時任務(wù)之后,必須清除定時任務(wù),不然angularjs會在離開這個controller后,仍然會執(zhí)行這個定時任務(wù)。
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持億速云。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。