Vue按鈕權(quán)限的實(shí)現(xiàn)示例
在編寫(xiě)Vue代碼的時(shí)候,經(jīng)常會(huì)碰到各種權(quán)限問(wèn)題,如:登錄權(quán)限、路由權(quán)限、按鈕權(quán)限等。今天我們就好好來(lái)說(shuō)一說(shuō)這個(gè)按鈕權(quán)限到底是怎么一回事。
一、概念
權(quán)限字面理解的意思就是權(quán)力限制,體現(xiàn)在日常業(yè)務(wù)開(kāi)發(fā)中就是不同的角色對(duì)應(yīng)不同的權(quán)力。打個(gè)比方:老師的權(quán)力是教書(shū)育人,醫(yī)生的權(quán)力是救死扶傷,律師的權(quán)力是懲惡揚(yáng)善。
在我們的工作中,經(jīng)常有一些按鈕是需要特定的角色來(lái)操作的,比如刪除按鈕只有管理員可以看到。
嘮叨兩句:按鈕權(quán)限是我們開(kāi)發(fā)中很重要的一環(huán),這個(gè)思想我們一定要掌握。這才是我們開(kāi)發(fā)一個(gè)大型系統(tǒng)所必須的技能。
二、按鈕權(quán)限的方式
通過(guò)本章我講教給小伙伴們?nèi)N實(shí)現(xiàn)按鈕權(quán)限的方式:自定義指令、函數(shù)式渲染、v-if判斷。
關(guān)于按鈕權(quán)限的場(chǎng)景一般是這樣的:比如當(dāng)我們登錄成功之后,后臺(tái)會(huì)返回給我們當(dāng)前用戶(hù)對(duì)應(yīng)的角色信息,可能是一個(gè)字符串,或者可能是一個(gè)字符串?dāng)?shù)組。這樣我們就可以通過(guò)角色信息來(lái)判斷是否渲染當(dāng)前按鈕。
2.1 自定義指定
首先我們先使用自定義指令來(lái)演示一下我們上邊的業(yè)務(wù)功能。關(guān)于自定義指令如何書(shū)寫(xiě),我就不做過(guò)多的解釋?zhuān)绻枰?,以后?huì)補(bǔ)充相關(guān)知識(shí)。
1、編寫(xiě)template部分
<div class="container">
<button>admin權(quán)限按鈕</button>
</div>模板中button標(biāo)簽是我們的權(quán)限按鈕
2、編寫(xiě)自定義指定:el是我們掛載的元素,binging可以獲取傳入的值
<div class="container">
<button v-permission="['admin', 'apadmin']">admin權(quán)限按鈕</button>
</div>
<script setup>
const vPermission = (el, binding) => {
// 獲取角色數(shù)組
const roles = binding.value;
if (!roles.includes('admin')) {
el.remove();
}
}
<script>注意:通過(guò)自定義指令來(lái)判斷當(dāng)前角色是否為admin,如果不滿(mǎn)足條件我們就移除button標(biāo)簽。
2.2 v-if
v-if和自定義指令類(lèi)似,我們通過(guò)綁定一個(gè)函數(shù)通過(guò)返回值來(lái)判斷是否顯示當(dāng)前的button標(biāo)簽,具體代碼如下:
代碼實(shí)現(xiàn)
<div class="container">
<button v-if="!isPermission()">admin權(quán)限按鈕</button>
</div>
<script setup>
// 1. 這里模擬后臺(tái)返回的角色權(quán)限列表
const roles = ['admin', 'apadmin'];
const isPermission = () => {
let flag = false;
if (!roles.includes('admin')) {
flag = true;
}
return flag;
}2.3 函數(shù)式渲染
這種方式不同于前兩種,它是通過(guò)一個(gè)函數(shù)來(lái)動(dòng)態(tài)渲染插槽中的內(nèi)容,這個(gè)就類(lèi)似于我們寫(xiě)一個(gè)組件。我認(rèn)為這種方式要明顯好于前面兩種,尤其是v-if。
1、函數(shù)實(shí)現(xiàn)
我們創(chuàng)建一個(gè)PermComp.js文件,我們暴露出一個(gè)方法。
// PermComp.js
import { getCurrentInstance } from 'vue';
export default ({ roles }) => {
// 1. 獲取組件實(shí)例
const instance = getCurrentInstance();
if (roles.includes('admin')) {
// 2. 渲染插槽內(nèi)容
return instance.slots && instance.slots.default();
}
}2、組件使用
<template>
<div class="container">
<PermComp :roles="roles">
<button>admin權(quán)限按鈕</button>
</PermComp>
</div>
</template>
<script setup>
import PermComp from './views/test/components/PermComp.js';
// 后臺(tái)返回的角色權(quán)限列表
const roles = ['admin', 'apadmin'];
</script>2.4 小結(jié)
這里演示了三種按鈕權(quán)限實(shí)現(xiàn)的方式,然后我有說(shuō)到最后一個(gè)是我比較推薦的,為什么?
因?yàn)橥ㄟ^(guò)v-if的實(shí)現(xiàn)方式我們可以看到,根據(jù)Vue的生命周期我們發(fā)現(xiàn),v-if的執(zhí)行是在我們DOM掛載之后完成的,所以這樣會(huì)浪費(fèi)性能。因?yàn)檫@個(gè)按鈕我們可能根本就不需要,但是我們會(huì)有一個(gè)掛載-> v-if判斷-> 卸載, 這么一個(gè)過(guò)程。
三、總結(jié)
到此這篇關(guān)于Vue按鈕權(quán)限的實(shí)現(xiàn)示例的文章就介紹到這了,更多相關(guān)Vue按鈕權(quán)限內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- Vue自定義指令實(shí)現(xiàn)按鈕級(jí)的權(quán)限控制的示例代碼
- vue3實(shí)現(xiàn)按鈕權(quán)限管理的項(xiàng)目實(shí)踐
- vue3?自定義指令控制按鈕權(quán)限的操作代碼
- vue實(shí)現(xiàn)前端按鈕組件權(quán)限管理
- vue使用自定義指令來(lái)控制頁(yè)面按鈕組的權(quán)限思想
- vue使用自定義指令實(shí)現(xiàn)按鈕權(quán)限展示功能
- vue路由權(quán)限和按鈕權(quán)限的實(shí)現(xiàn)示例
- vue 按鈕 權(quán)限控制介紹
- Vue實(shí)現(xiàn)按鈕級(jí)權(quán)限方案
相關(guān)文章
vuejs在解析時(shí)出現(xiàn)閃爍的原因及防止閃爍的方法
這篇文章主要介紹了vuejs在解析時(shí)出現(xiàn)閃爍的原因及防止閃爍的方法,本文介紹的非常詳細(xì),具有參考借鑒價(jià)值,感興趣的朋友一起看看吧2016-09-09
vue組件中使用props傳遞數(shù)據(jù)的實(shí)例詳解
這篇文章主要介紹了vue組件中使用props傳遞數(shù)據(jù)的實(shí)例詳解,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下2018-04-04
vue自定義組件@click點(diǎn)擊失效問(wèn)題及解決
這篇文章主要介紹了vue自定義組件@click點(diǎn)擊失效問(wèn)題及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-04-04
如何使用 vue-cli 創(chuàng)建模板項(xiàng)目
這篇文章主要介紹了如何使用 vue-cli 創(chuàng)建模板項(xiàng)目,幫助大家更好的理解和學(xué)習(xí)vue框架的知識(shí),感興趣的朋友可以了解下2020-11-11
Vite3結(jié)合Svelte3使用@import導(dǎo)入scss樣式
這篇文章主要為大家介紹了Vite3結(jié)合Svelte3使用@import導(dǎo)入scss樣式實(shí)現(xiàn)實(shí)例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-06-06
axios的interceptors多次執(zhí)行問(wèn)題解決
這篇文章主要為大家介紹了axios中interceptors多次執(zhí)行問(wèn)題解決,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-06-06
vue使用原生js實(shí)現(xiàn)滾動(dòng)頁(yè)面跟蹤導(dǎo)航高亮的示例代碼
這篇文章主要介紹了vue使用原生js實(shí)現(xiàn)滾動(dòng)頁(yè)面跟蹤導(dǎo)航高亮的示例代碼,滾動(dòng)頁(yè)面指定區(qū)域?qū)Ш礁吡?。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-10-10
vue深入解析之render function code詳解
vue對(duì)大家來(lái)說(shuō)應(yīng)該再熟悉不過(guò)了,下面這篇文章主要給大家深入的解析了vue之render function code的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起看看吧。2017-07-07

