DDR爱好者之家 Design By 杰米
需求
在业务中,会碰到许多点击请求的情况,在请求前改变一个lock变量(在lock变回来之前,点击无效),在请求回调中再改变lock.以确保在,请求回来之前,不会重复请求。或者类似的点击节流业务
实现方式
指令
<div v-for="a in 3" :key="a" v-demo:getData="a">指令</div> //getData是函数名,a是传入的参数 directives: { demo: { bind(el: Element, binding: any, vnode: VNode) { const that: any = vnode.context // console.log(binding, vnode) // console.log(binding.arg, binding.value) if (!that[binding.arg].isBind){ // 打上标记,如果已经转换了,就不转了 that[binding.arg] = deb(that[binding.arg]) that[binding.arg].isBind = true } el.addEventListener('click', function T(event: Event): void{ that[binding.arg](binding.value) }) }, }, },
组件
子组件
<template> <div> <div @click="senClick"> <slot></slot> </div> </div> </template> <script lang="ts"> import Vue from 'vue'; import { Component, Prop } from 'vue-property-decorator'; @Component({}) export default class Child extends Vue { @Prop({ type: Number, default: 500 }) public timeOut!: number; // 时间 @Prop({ type: String, default: 'throttle' }) public type!: string; // 类型 @Prop() public params!: any; // 传入参数 public message: string = 'Hello'; public throttleLock: boolean = false; public debounceLock: number = 0; public time: any; public senClick(): void { console.log(this.timeOut, this.type, this.params); if (this.type === 'throttle') { if (this.throttleLock) { return; } this.throttleLock = true; setTimeout(() => { this.throttleLock = false; }, this.timeOut); this.$emit('myClick', this.params); } else if (this.type === 'debounce') { if (this.debounceLock) { clearTimeout(this.debounceLock); } this.debounceLock = setTimeout(() => { this.$emit('myClick', this.params); }, this.timeOut); } else { this.$emit('myClick', this.params); } } } </script> <style scoped lang='stylus'> div { width: 100%; height: 100%; } </style>
父组件
<template> <div class="home"> <throttle-and-debounce @myClick="getData" :time="500" type="throttle" params="123"> <div>我是组件内容</div> </throttle-and-debounce> </div> </template> import { Component, Vue } from 'vue-property-decorator'; import throttleAndDebounce from '@/components/throttleAndDebounce.vue'; @Component({ components: { throttleAndDebounce, }, }) export default class home extends Vue { public getData(e: any){ console.log('异步数据', e) } } </script>
plugin
函数
function deb(fn: function){ let lock: number return (e) => { if (lock){ clearTimeout(lock) } console.log('创建闭包延迟执行') lock = setTimeout(() => { fn(e) }, 1500) } } export {deb}
组件内使用
<template> <div class="home"> <div @click="func(123)">function</div> </div> </template> <script lang="ts"> import { Component, Vue } from 'vue-property-decorator'; import {deb} from '@/assets' @Component({ components: { throttleAndDebounce, }, }) export default class home extends Vue { public beforeCreate(){ this.func = deb((e: {a: number}) => { console.log('this', e) }) } } </script>
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
DDR爱好者之家 Design By 杰米
广告合作:本站广告合作请联系QQ:858582 申请时备注:广告合作(否则不回)
免责声明:本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除!
免责声明:本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除!
DDR爱好者之家 Design By 杰米
暂无评论...
更新日志
2024年11月25日
2024年11月25日
- 凤飞飞《我们的主题曲》飞跃制作[正版原抓WAV+CUE]
- 刘嘉亮《亮情歌2》[WAV+CUE][1G]
- 红馆40·谭咏麟《歌者恋歌浓情30年演唱会》3CD[低速原抓WAV+CUE][1.8G]
- 刘纬武《睡眠宝宝竖琴童谣 吉卜力工作室 白噪音安抚》[320K/MP3][193.25MB]
- 【轻音乐】曼托凡尼乐团《精选辑》2CD.1998[FLAC+CUE整轨]
- 邝美云《心中有爱》1989年香港DMIJP版1MTO东芝首版[WAV+CUE]
- 群星《情叹-发烧女声DSD》天籁女声发烧碟[WAV+CUE]
- 刘纬武《睡眠宝宝竖琴童谣 吉卜力工作室 白噪音安抚》[FLAC/分轨][748.03MB]
- 理想混蛋《Origin Sessions》[320K/MP3][37.47MB]
- 公馆青少年《我其实一点都不酷》[320K/MP3][78.78MB]
- 群星《情叹-发烧男声DSD》最值得珍藏的完美男声[WAV+CUE]
- 群星《国韵飘香·贵妃醉酒HQCD黑胶王》2CD[WAV]
- 卫兰《DAUGHTER》【低速原抓WAV+CUE】
- 公馆青少年《我其实一点都不酷》[FLAC/分轨][398.22MB]
- ZWEI《迟暮的花 (Explicit)》[320K/MP3][57.16MB]