请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

封装的debounce在vue中调用

老师好,我在vue项目中练习手写防抖,遇到以下问题,麻烦帮忙看下~
<input type=“text” @input=“handleChange($event)” id=“input1” />

handleChange(e) {
      if (timer) {
        clearTimeout(timer);
      }
      timer = setTimeout(() => {
        console.log("e==", e.target.value);
        timer = null;
      }, 500);
    },

这样是可行的。
将debounce封装后,在mounted里调用也是可行的:

// 封装的debounce
debounce(fn, delay = 500) {
      let timer = null;
      return () => {
        if (timer) {
          clearTimeout(timer);
        }
        console.log("timer", timer);
        timer = setTimeout(() => {
          fn.apply(this, arguments);
          timer = null;
        }, delay);
      };
    },
mounted() {
    let input1 = document.getElementById("input1");
    input1.addEventListener(
      "keyup",
      this.debounce(() => {
        console.log("e333333333333==", input1.value);
      }, 1000)
    );
  },

但是在handleChange中调用封装的debounce却不能打印:

handleChange(e) {
      let val = e.target.value;
      this.debounce(() => {
        console.log("eeeeeeeeeee==", val);
      }, 1000);
    },

以上,麻烦老师协助查看一下~

正在回答

1回答

首先封装一个 debounce 函数,然后在 Vue 的 methods 中这样写

{
    methods: {
        fn: debounce(function() {
            // 函数体
        })
    }
}

然后,在 mounted 中调用 this.fn 就可以实现 debounce

0 回复 有任何疑惑可以回复我~
  • 提问者 小小Yu #1
    非常感谢!谢谢老师
    回复 有任何疑惑可以回复我~ 2022-07-15 22:42:15
问题已解决,确定采纳
还有疑问,暂不采纳
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号