封装el-button按钮实现权限控制和防抖操作
子组件封装:
1 <template> 2 <el-button 3 v-bind="$attrs" 4 :loading="loadingStatus" 5 @click="handleClick" 6 v-if="judgePerm(permission)" 7 > 8 <slot/> 9 </el-button> 10 </template> 11 12 <script> 13 import { hasPermission } from './index.js' 14 export default { 15 name: 'prButton', 16 props: { 17 controlLoading: { 18 type: Boolean, 19 default: false 20 }, 21 permission: { 22 type: Number, 23 }, 24 }, 25 data() { 26 return { 27 loadingStatus: false 28 } 29 }, 30 methods: { 31 judgePerm(perms){//按妞权限控制 32 return hasPermission(perms) 33 }, 34 handleClick() { 35 if (this.controlLoading) { 36 this.loadingStatus = true 37 } 38 this.$emit('click', () => { 39 this.loadingStatus = false 40 }) 41 } 42 } 43 } 44 </script> 45 46 <style> 47 48 </style>
其中v-bind="$attrs"继承el-button的所有方法和属性设置,judgePerm()方法是为了进行权限控制,其中permission是当前按钮的权限标识,可以是数字或者字符串。loadingStatus是进行控制按钮被连续点击发送请求的问题,当点击后会调用handleClick()方法。然后通过$emit触发click事件将回调函数传到父组件,来实现loading。
import store from '@/store' export function hasPermission(perms){ return perms==store.state.count; }
获取权限进行匹配返回,这个可以根据自己项目的要求来写不同的方法。
父组件:
<template> <div> <div id="header"> <pr-button :permission ="20" type="primary" @click="submit2">测试按妞</pr-button> </div> </div> </template> <script> export default { name:"RetrievalHeader", methods:{ submit2(done){ setTimeout(() => { done() }, 3000) } }, }
子组件触发click事件进而调用父组件的submit2方法,来进行事件的处理最后通过调用done(),来结束loading,实现连续点击触发请求。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了