封裝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,實現連續點擊觸發請求。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM