Vue3如何自定義指令directive(如權(quán)限控制)
更新時間:2024年12月26日 14:48:51 作者:張小偉i
本文詳細(xì)介紹了如何在Vue3項目中創(chuàng)建自定義指令directive1,首先,在src/directives/index.ts文件中引入自定義指令,然后,創(chuàng)建src/directives/permission.ts文件來定義具體指令邏輯,在main.ts文件中引入并注冊該指令,最后,在頁面中使用自定義指令
Vue3自定義指令directive
1.創(chuàng)建src/directives/index.ts文件
//@ts-nocheck import { Directive } from "vue"; import { permission } from "@/directives/permission.ts"; const allGlobalDirectives = { permission }; // console.log(allGlobalDirectives, "allGlobalDirectives"); //打印發(fā)現(xiàn)是導(dǎo)出的自定義指令名,permission export default { install(app) { Object.keys(allGlobalDirectives).forEach(key => { //Object.keys() 返回一個數(shù)組,值是所有可遍歷屬性的key名 app.directive(key, (allGlobalDirectives as { [key: string]: Directive })[key]); //key是自定義指令名字;后面應(yīng)該是自定義指令的值,值類型是string }); } };
2.創(chuàng)建src/directives/permission.ts文件
import type { DirectiveBinding } from 'vue' export const permission = (el: HTMLElement, binding: DirectiveBinding) => { // value 獲取用戶使用自定義指令綁定的內(nèi)容 const {value} = binding; // 獲取用戶所有的權(quán)限按鈕 // const permissionBtn = sessionStorage.getItem("permission"); const permissionBtn = ["user.add23"]; // 判斷用戶使用自定義指令,是否使用正確了 if (value && value instanceof Array && value.length > 0) { const permissionFunc = value; //判斷傳遞進(jìn)來的按鈕權(quán)限,用戶是否擁有 //Array.some(), 數(shù)組中有一個結(jié)果是true返回true,剩下的元素不會再檢測 const hasPermission = permissionBtn.some((role: any) => { return permissionFunc.includes(role); }); console.log("hasPermission", value, hasPermission); // 當(dāng)用戶沒有這個按鈕權(quán)限時,設(shè)置隱藏這個按鈕 if (!hasPermission) { el.style.display = "none"; } } else { throw new Error("need roles! Like v-permission=\"['admin','editor']\""); } };
3.main.ts引入
// 引入自定義插件對象:注冊全局組件 import globalDirectives from "@/directives/index.ts"; const app = createApp(App); // 安裝自定義指令 app.use(globalDirectives); app.mount("#app");
4.頁面中使用
<span v-permission="['user.add']" class="padding-right-20">測試</span>
總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
詳解如何創(chuàng)建并發(fā)布一個 vue 組件
這篇文章主要介紹了詳解如何創(chuàng)建并發(fā)布一個vue組件,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-11-11Vue中v-show添加表達(dá)式的問題(判斷是否顯示)
這篇文章主要介紹了關(guān)于Vue中v-show中添加表達(dá)式用于判斷是否顯示的問題,很多朋友經(jīng)常會遇到這樣的需求,有數(shù)據(jù)來源和標(biāo)簽類型兩行選項,需要實現(xiàn)點擊上面的某個數(shù)據(jù)來源時,標(biāo)簽類型自動切換功能,感興趣的朋友一起看看吧2018-03-03ant design vue datepicker日期選擇器中文化操作
這篇文章主要介紹了ant design vue datepicker日期選擇器中文化操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-10-10Vue之el-select結(jié)合v-if動態(tài)控制template顯示隱藏方式
這篇文章主要介紹了Vue之el-select結(jié)合v-if動態(tài)控制template顯示隱藏方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-04-04vue使用axios實現(xiàn)文件上傳進(jìn)度的實時更新詳解
最近在學(xué)習(xí)axios,然后項目就用到了,所以這篇文章主要給大家介紹了關(guān)于vue中利用axios實現(xiàn)文件上傳進(jìn)度的實時更新的相關(guān)資料,文中先對axios進(jìn)行了簡單的介紹,方法大家理解學(xué)習(xí),需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。2017-12-12基于Vue3與免費滿血版DeepSeek實現(xiàn)無限滾動+懶加載+瀑布流模塊及優(yōu)化過程
在進(jìn)行非完全標(biāo)準(zhǔn)化數(shù)據(jù)的可視化展示時,瀑布流是一種經(jīng)常被采用的展示方法,瀑布流能夠有效地將不同大小規(guī)格的內(nèi)容以一種相對規(guī)整的方式呈現(xiàn)出來,本文給大家介紹了基于Vue3與免費滿血版DeepSeek實現(xiàn)無限滾動+懶加載+瀑布流模塊,需要的朋友可以參考下2025-03-03Vue按照順序?qū)崿F(xiàn)多級彈窗效果 附Demo
這篇文章主要介紹了Vue按照順序?qū)崿F(xiàn)多級彈窗效果 附Demo,通過實例代碼介紹了單個彈窗和多級彈窗的實現(xiàn)方法,感興趣的朋友跟隨小編一起看看吧2024-05-05vue前端測試開發(fā)watch監(jiān)聽data的數(shù)據(jù)變化
這篇文章主要為大家介紹了vue測試開發(fā)watch監(jiān)聽data的數(shù)據(jù)變化,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-05-05