Vue中用lodash的debounce防抖来控制文本框实时搜索触发接口的频率

项目中常有这样的功能情景:

列表页里有文本框,用来模糊搜索,而文本框的触发事件,一般都是 keyup 、 input 、enter键(手机上是完成/搜索按钮) , 除去 enter 键的事件是按一次触发一次以外 , keyup 事件是按键松开就会触发的。

那么问题来了,不停的输入,按键按了多少次,文本框绑定的 keyup 事件就会被触发多少次,导致接口请求频率高发,这种问题在浏览器Network里就显而易见,有一水儿的同一个接口的请求都是pending状态待响应。严重的会造成服务器高压。

为了控制高频触发接口,lodash工具函数库作用就来了,它的debounce函数可以有效控制连续操作只取最后一次触发,会等连续操作停下之后再给你响应。


用法如下:
  1. 进入项目根目录,用npm 安装 lodash, 用 cnpm 也行
    npm install --save lodash

  2. 单个组件里这么用:

<template>
	<div class="wrap">
	   <form class="search-block" action="javascript:void 0">
		  <input type="text" v-model="txtInput" @keyup.13="tapToSearch" @input="tapToSearch" >
	   </form>
	</div>
</template>

<script>
 let lodash = require('lodash')
 export default {
    data() {
      return {
			txtInput:''
	    };
    },
	methods: {
	  // 搜索
      tapToSearch: lodash.debounce(function (event) {
        let that = this;
        event.preventDefault();
        // 调接口
        // 。。。
      }, 300)
    }
 }
</script>

以下我用 vue + mint ui 做搜索的功能,适用手机H5端,可实时输入搜索,可点击手机键盘完成/搜索按钮触发:

<template>
  <div class="wrap">
	<form class="search-block" action="javascript:void 0">
      <mt-field label="" placeholder="请输入" v-model="txtSearch" class="txt-search"
                @keyup.native.13="tapToSearch" @input.native="tapToSearch">
      </mt-field>
    </form>
  </div>
</template>

<script>
  let lodash = require('lodash')
  export default {
    data() {
      return {
		  txtSearch: ''
      };
    },
	methods: {
	  // 搜索
      tapToSearch: lodash.debounce(function (event) {
        let that = this;
        event.preventDefault();
        // 调接口
        // ...
      }, 300)
    }
  }
</script>

注意,像element ui , mint ui 这样的vue框架对input封装了一道,绑定事件要加 native 修饰符 ,否则无法触发事件。

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值