feat: 添加防抖、截流、复制自定义指令使用示例

This commit is contained in:
xiaoxian521 2023-06-12 21:11:31 +08:00
parent 3fd9b15698
commit aec2a35424
5 changed files with 129 additions and 1 deletions

View File

@ -68,6 +68,7 @@ menus:
hsguide: Guide
hsAble: Able
hsMenuTree: Menu Tree
hsOptimize: Debounce、Throttle、Copy Directives
hsWatermark: Water Mark
hsPrint: Print
hsDownload: Download

View File

@ -68,6 +68,7 @@ menus:
hsguide: 引导页
hsAble: 功能
hsMenuTree: 菜单树结构
hsOptimize: 防抖、截流、复制指令
hsWatermark: 水印
hsPrint: 打印
hsDownload: 下载

View File

@ -38,7 +38,7 @@ export const optimize: Directive = {
)
: throttle(
params ? () => value.fn(...params) : value.fn,
value?.timeout ?? 200
value?.timeout ?? 1000
)
);
} else {

View File

@ -10,6 +10,15 @@ export default {
rank: able
},
children: [
{
path: "/able/directives",
name: "Directives",
component: () => import("@/views/able/directives.vue"),
meta: {
title: $t("menus.hsOptimize"),
extraIcon: "IF-pure-iconfont-new svg"
}
},
{
path: "/able/watermark",
name: "WaterMark",

View File

@ -0,0 +1,117 @@
<script setup lang="ts">
import { ref } from "vue";
import { message } from "@/utils/message";
defineOptions({
name: "Directives"
});
const search = ref("");
const searchTwo = ref("");
const searchThree = ref("");
const searchFour = ref("");
const searchFive = ref("");
const searchSix = ref("copy");
const text = ref("可复制的文本");
function onInput() {
message(search.value);
}
function onInputTwo() {
message(searchTwo.value);
}
function onInputThree({ name, sex }) {
message(`${name}${sex}${searchThree.value}`);
}
function onInputFour() {
message(searchFour.value);
}
function onInputFive({ name, sex }) {
message(`${name}${sex}${searchFive.value}`);
}
</script>
<template>
<el-card shadow="never">
<template #header>
<div class="card-header">
<span class="font-medium">自定义防抖截流文本复制指令</span>
</div>
</template>
<div class="mb-2">
防抖指令连续输入只会执行第一次点击事件立即执行
<el-input
v-optimize="{
event: 'input',
fn: onInput,
immediate: true,
timeout: 1000
}"
v-model="search"
class="!w-[200px]"
clearable
@clear="onInput"
/>
</div>
<div class="mb-2">
防抖指令连续输入只会执行最后一次事件延后执行
<el-input
v-optimize="{ event: 'input', fn: onInputTwo, timeout: 400 }"
v-model="searchTwo"
class="!w-[200px]"
clearable
/>
</div>
<div>
防抖指令连续输入只会执行最后一次事件延后执行传参用法
<el-input
v-optimize="{
event: 'input',
fn: onInputThree,
timeout: 400,
params: { name: '小明', sex: '男' }
}"
v-model="searchThree"
class="!w-[200px]"
clearable
/>
</div>
<el-divider />
<div class="mb-2">
节流指令连续输入每一秒只会执行一次事件
<el-input
v-optimize:throttle="{ event: 'input', fn: onInputFour, timeout: 1000 }"
v-model="searchFour"
class="!w-[200px]"
clearable
/>
</div>
<div>
节流指令连续输入每一秒只会执行一次事件传参用法
<el-input
v-optimize:throttle="{
event: 'input',
fn: onInputFive,
params: { name: '小明', sex: '男' }
}"
v-model="searchFive"
class="!w-[200px]"
clearable
/>
</div>
<el-divider />
<div class="mb-2">
文本复制指令双击输入框内容即可复制
<el-input v-copy="searchSix" v-model="searchSix" class="!w-[200px]" />
</div>
<div>
文本复制指令自定义触发事件单击复制
<span v-copy:click="text" class="text-sky-500">{{ text }}</span>
</div>
</el-card>
</template>