AngularJS中$watch和$timeout的使用示例
前言
相信使用過(guò)Angular的小伙伴應(yīng)該對(duì)$watch
這個(gè)監(jiān)聽(tīng)不陌生,它主要用于監(jiān)聽(tīng)模型的變化,當(dāng)你的模型部分發(fā)生變化時(shí)它會(huì)通知你。我在最近的平臺(tái)管理開(kāi)發(fā)中,也用到這個(gè)牛逼哄哄的Angular,在做filter的時(shí)候不可以避免的用到$watch
監(jiān)聽(tīng)。當(dāng)時(shí)我的想法就是搜索的時(shí)候不需要點(diǎn)擊搜索按鈕,這樣在用戶(hù)體驗(yàn)上也是極好的,避免了輸入后再次點(diǎn)擊的操作步驟。
然后,當(dāng)$watch
監(jiān)聽(tīng)的時(shí)候一開(kāi)始代碼是這樣的
$scope.$watch('filterOptions', function (newVal, oldVal) { if (newVal !== oldVal) { //filterOptions發(fā)生變化時(shí),調(diào)用方法 $scope.getPagedDataAsync('admin/bill/'+$stateParams.page+'?pageCount='+$scope.paginationConf.itemsPerPage,$scope.filterOptions); } }, true);
這樣做,看上去沒(méi)什么大問(wèn)題,每次輸入的時(shí)候就拉一次數(shù)據(jù)。但是!但是!但是!重要的事情說(shuō)三遍!當(dāng)用戶(hù)輸入“張三”這個(gè)搜索字的時(shí)候,代碼是這樣執(zhí)行的,“張”字拉了一次數(shù)據(jù),“三”字有拉了一次數(shù)據(jù)。好了嘛,這還是兩個(gè)字,要是輸入十個(gè)字呢,服務(wù)器就哭了,服務(wù)器就來(lái)打前端了。
這個(gè)時(shí)候就需要用到Angular中的這貨了——$timeout
,他是angular中的一個(gè)定時(shí)器。針對(duì)我們搜索來(lái)說(shuō),我們?cè)诒O(jiān)聽(tīng)filterOptions
發(fā)生變化時(shí),不要馬上請(qǐng)求,給他0.8秒的一個(gè)等待的時(shí)間,如果這0.8秒內(nèi)filterOptions
沒(méi)有又一次發(fā)生變化,那么就請(qǐng)求拉數(shù)據(jù),否則就繼續(xù)輸入。
代碼如下:
$scope.$watch('filterOptions', function (newVal, oldVal) { if (newVal !== oldVal) { if (timeout) $timeout.cancel(timeout); timeout = $timeout(function() { $scope.getPagedDataAsync('admin/bill/'+$stateParams.page+'?pageCount='+$scope.paginationConf.itemsPerPage,$scope.filterOptions); }, 800); } }, true);
總結(jié)
以上就是這篇文章的全部?jī)?nèi)容,希望能對(duì)大家的學(xué)習(xí)或者工作帶來(lái)一定的幫助,如果有疑問(wèn)大家可以留言交流。
相關(guān)文章
AngularJS框架中的雙向數(shù)據(jù)綁定機(jī)制詳解【減少需要重復(fù)的開(kāi)發(fā)代碼量】
這篇文章主要介紹了AngularJS框架中的雙向數(shù)據(jù)綁定機(jī)制,結(jié)合實(shí)例形式分析了AngularJS雙向數(shù)據(jù)綁定機(jī)制的原理及實(shí)現(xiàn)方法,以及減少需要重復(fù)開(kāi)發(fā)代碼量的優(yōu)勢(shì),需要的朋友可以參考下2017-01-01Angular實(shí)現(xiàn)的簡(jiǎn)單查詢(xún)天氣預(yù)報(bào)功能示例
這篇文章主要介紹了Angular實(shí)現(xiàn)的簡(jiǎn)單查詢(xún)天氣預(yù)報(bào)功能,涉及AngularJS針對(duì)第三方API接口交互的相關(guān)操作技巧,需要的朋友可以參考下2017-12-12AngularJS單選框及多選框?qū)崿F(xiàn)雙向動(dòng)態(tài)綁定
這篇文章主要為大家詳細(xì)介紹了AngularJS單選框及多選框?qū)崿F(xiàn)雙向動(dòng)態(tài)綁定的相關(guān)資料,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-01-01關(guān)于angular表單動(dòng)態(tài)驗(yàn)證的一種新思路分享
在Angular?中不管是模板驅(qū)動(dòng)表單還是響應(yīng)式表單,對(duì)于動(dòng)態(tài)創(chuàng)建表單的支持都很好,下面這篇文章主要給大家介紹了關(guān)于angular表單動(dòng)態(tài)驗(yàn)證的一種新思路,需要的朋友可以參考下2022-03-03分享使用AngularJS創(chuàng)建應(yīng)用的5個(gè)框架
如果你計(jì)劃使用AngularJS創(chuàng)建你的Web應(yīng)用,那現(xiàn)在就開(kāi)始吧。你不需要有任何的恐懼和擔(dān)心,因?yàn)楝F(xiàn)在有很多的框架都可以很好地支持AngularJS2015-12-12Angular.JS利用ng-disabled屬性和ng-model實(shí)現(xiàn)禁用button效果
這篇文章主要介紹了Angular.JS利用ng-disabled屬性和ng-model實(shí)現(xiàn)禁用button效果的相關(guān)資料,文中給出了詳細(xì)的示例代碼,相信對(duì)大家具有一定的參考價(jià)值,需要的朋友們下面來(lái)一起看看吧。2017-04-04