成人午夜视频全免费观看高清-秋霞福利视频一区二区三区-国产精品久久久久电影小说-亚洲不卡区三一区三区一区

angular.js和vue.js中實現(xiàn)函數(shù)去抖示例(debounce)

問題描述

成都創(chuàng)新互聯(lián)是專業(yè)的磐安網(wǎng)站建設公司,磐安接單;提供成都網(wǎng)站制作、網(wǎng)站建設、外貿(mào)網(wǎng)站建設,網(wǎng)頁設計,網(wǎng)站設計,建網(wǎng)站,PHP網(wǎng)站建設等專業(yè)做網(wǎng)站服務;采用PHP框架,可快速的進行磐安網(wǎng)站開發(fā)網(wǎng)頁制作和功能擴展;專業(yè)做搜索引擎喜愛的網(wǎng)站,專業(yè)的做網(wǎng)站團隊,希望更多企業(yè)前來合作!

搜索輸入框中,只當用戶停止輸入后,才進行后續(xù)的操作,比如發(fā)起Http請求等。

學過電子電路的同學應該知道按鍵防抖。原理是一樣的:就是說當調(diào)用動作n毫秒后,才會執(zhí)行該動作,若在這n毫秒內(nèi)又調(diào)用此動作則將重新計算執(zhí)行時間。本文將分別探討在angular.js和vue.js中如何實現(xiàn)對用戶輸入的防抖。

angular.js中解決方案

把去抖函數(shù)寫成一個service,方便多處調(diào)用:

.factory('debounce', ['$timeout','$q', function($timeout, $q) {
  // The service is actually this function, which we call with the func
  // that should be debounced and how long to wait in between calls
  return function debounce(func, wait, immediate) {
   var timeout;
   // Create a deferred object that will be resolved when we need to
   // actually call the func
   var deferred = $q.defer();
   return function() {
    var context = this, args = arguments;
    var later = function() {
     timeout = null;
     if(!immediate) {
      deferred.resolve(func.apply(context, args));
      deferred = $q.defer();
     }
    };
    var callNow = immediate && !timeout;
    if ( timeout ) {
     $timeout.cancel(timeout);
    }
    timeout = $timeout(later, wait);
    if (callNow) {
     deferred.resolve(func.apply(context,args));
     deferred = $q.defer();
    }
    return deferred.promise;
   };
  };
 }])

調(diào)用方法,在需要使用該功能的controller/directive中注入debounce,也要注入$watch,然后:

$scope.$watch('searchText',debounce(function (newV, oldV) {
  console.log(newV, oldV);
  if (newV !== oldV) {
    $scope.getDatas(newV);
  }
}, 350));

大功告成!

Vue.js中的解決方案

首先在公共函數(shù)文件中注冊debounce

export function debounce(func, delay) {
 let timer

 return function (...args) {
  if (timer) {
   clearTimeout(timer)
  }
  timer = setTimeout(() => {
   func.apply(this, args)
  }, delay)
 }
}

然后在需要使用的組件中引入debounce,并且在created生命周期內(nèi)調(diào)用:

created() {
 this.$watch('searchText', debounce((newSearchText) => {
  this.getDatas(newSearchText)
 }, 200))
}

大功告成!

以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持創(chuàng)新互聯(lián)。

分享名稱:angular.js和vue.js中實現(xiàn)函數(shù)去抖示例(debounce)
網(wǎng)站URL:http://jinyejixie.com/article28/iehijp.html

成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站改版、電子商務全網(wǎng)營銷推廣、微信公眾號虛擬主機、移動網(wǎng)站建設

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉載內(nèi)容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)

網(wǎng)站托管運營
德昌县| 福鼎市| 昌江| 永川市| 互助| 肃宁县| 休宁县| 玛多县| 西和县| 华坪县| 利津县| 西乌珠穆沁旗| 西和县| 泸西县| 五莲县| 洞头县| 满洲里市| 西盟| 乐昌市| 马公市| 郎溪县| 嘉义市| 友谊县| 雅江县| 新巴尔虎左旗| 阿克陶县| 明光市| 永顺县| 聂拉木县| 大宁县| 崇阳县| 怀化市| 桑日县| 台江县| 凤冈县| 高台县| 萨嘎县| 中山市| 久治县| 南华县| 南靖县|