欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

vue使用自定義指令來(lái)控制頁(yè)面按鈕組的權(quán)限思想

 更新時(shí)間:2022年08月15日 10:34:21   作者:A黃俊輝A  
這篇文章主要介紹了vue使用自定義指令來(lái)控制頁(yè)面按鈕組的權(quán)限思想,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

自定義指令來(lái)控制頁(yè)面按鈕組的權(quán)限思想

在vuejs中, 我們可以自定義一些指令,來(lái)控制一些按鈕加載之前的動(dòng)作, 比如現(xiàn)有的 v-if 或者 v-show

這些功能是我們可以手寫的, 現(xiàn)在們來(lái)做一個(gè)初級(jí)的頁(yè)面級(jí)的權(quán)限控制的例子

vue自定義指令

<template>
? <div class="table-wrapper">
? ? <div class="action-bar">
? ? ?? ?//v-hasProm ?指令是說(shuō) 如果指令中value 包含在 data.promission 數(shù)組中, 就把這個(gè)按鈕顯示出來(lái)?
? ? ? <el-button v-has-prom="'admin.goods.edit'" type="success" icon="el-icon-plus" @click.native = "$router.push('/makeform/create')">新建</el-button>
? </div>
</template>
<script>
export default {
? name: "FromList",
? //這里添加了一個(gè)局部指令 (只作用于本面頁(yè))
? directives:{
? ? hasProm:{
? ? ? inserted(el,binding,vnode){
? ? ? ? console.log(el,binding,vnode);
? ? ? ? //這里要說(shuō)一下 這三個(gè)參數(shù)
? ? ? ? // el就是 指令所在的 元素(element) ? 我們可以使用 ?el.style.dispaly='none' 來(lái)對(duì)el 的css進(jìn)行設(shè)置
? ? ? ? //binding 是指的binding 的信息, 其中可以得到我們 v-hasProm = value 中的 ?value值
? ? ? ? //vnode 就是指的虛擬節(jié)點(diǎn), 我們可以通過(guò)它, 得到當(dāng)前頁(yè)面中的 ?component.data 中的數(shù)據(jù) 也就是promission 數(shù)組長(zhǎng) ?頁(yè)面的 this 在指令中是得不到了, 我們能過(guò) ?vnode.context得到的就是 this
?? ??? ?//看一下代碼
?? ??? ?let bindvalue = binding.value; ? ?//bindvalue 的值是'admin.goods.edit'
?? ??? ?let promissionArr = vnode.context.promission;
?? ??? ?let p = promissionArr.find((item)=>{
?? ??? ??? ?return item == bindvalue;
?? ??? ?})
?? ??? ?if(p == undefined){
?? ??? ??? ?//說(shuō)明在數(shù)組中沒(méi)有這個(gè)權(quán)限, 把這個(gè)元素給隱藏
?? ??? ??? ?el.style.display="none"
?? ??? ?}
?? ??? ?
? ? ? }
? ? }
? },
? data(){
? ? return {
? ? ?? ?promission:["admin.goods.add","admin.goods.edit","admin.goods.delete"]
? ? ?? ?//上面的權(quán)限更表 以字符串開式, 這個(gè)其實(shí)可以從后端獲取得到, 然后放在store中, 全局可使用, 這里就寫在data中算了
? ? }
? },
? created() {
? },
? methods:{
? }
}
</script>
<style scoped>
</style>

上面的代碼, 主要要注意 自定義指令的參數(shù), 都可以獲得什么有用的數(shù)據(jù)。

vue添加按鈕權(quán)限~通過(guò)自定義指令

1、需求

客戶:需要把導(dǎo)入、刪除權(quán)限化;指定人員有權(quán)限;

2、思路

后臺(tái)有一個(gè)接口,是可以查詢到當(dāng)前登錄人的權(quán)限;

前端方案:

1.每到一個(gè)頁(yè)面就請(qǐng)求一次接口是否有權(quán)限;(太麻煩了)

2.自定義指令 · Vue.directive;(一次請(qǐng)求,一直用)

3、代碼實(shí)現(xiàn)

1.自定義指令

創(chuàng)建 /directive/permission/hasPermi 文件

//用來(lái)獲取權(quán)限數(shù)據(jù)
import store from '@/store'
?
export default {
?
? inserted(el, binding, vnode) {
? ? //獲取綁定值
? ? const { value } = binding
? ? // TODO 匹配規(guī)則,在頁(yè)面寫的要對(duì)應(yīng)這個(gè)匹配規(guī)則
? ? const all_permission = "*:*:*";
? ? //獲取用戶權(quán)限數(shù)據(jù)
? ? const permissions = store.getters && store.getters.permissions?
if (value && value instanceof Array && value.length > 0) {?
? ? ? //權(quán)限標(biāo)志
? ? ? const permissionFlag = value
? ? ? //判斷用戶是否有此權(quán)限
? ? ? const hasPermissions = permissions.some(permission => {
? ? ? ? console.log('permission', permission);
? return all_permission === permission || permissionFlag.includes(permission)
? ? ? })
? ? ??
? ? ? //沒(méi)有權(quán)限-移除頁(yè)面上的控件
? ? ? if (!hasPermissions) {{
? ? ? ? console.log('沒(méi)有權(quán)限-移除');
? ? ? ? el.parentNode && el.parentNode.removeChild(el)
? ? ? }
? ? } else {?
? ? ? el.parentNode && el.parentNode.removeChild(el)
? ? ? throw new Error(`請(qǐng)?jiān)O(shè)置數(shù)組操作權(quán)限`)
? ? }
? }
}

2.注冊(cè)指令

創(chuàng)建 /directive/permission/index文件

import hasPermi from './hasPermi'
import Vue from "vue"
?
?
const install = function (Vue) {
? Vue.directive('hasPermi', hasPermi)
}
?
?
if (window.Vue) {
? window['hasPermi'] = hasPermi
? Vue.use(install);
}
?
export default install

3.在main.js里面進(jìn)行全局注冊(cè) 

import permission from './directive/permission'
?
?
Vue.use(permission)

vue官網(wǎng)對(duì)指令的解釋

https://cn.vuejs.org/v2/guide/custom-directive.html

4.使用方法

? ? ? <button
? ? ? ? ? ?v-has-permi="['btn:pre:del']"
? ? ? ? ? ?style="margin-top: 4px"/>
?
?
? ?<button
? ? ? ? ? ?v-has-permi="['btn:pre:export']"
? ? ? ? ? ?style="margin-top: 4px"/>

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。 

相關(guān)文章

  • vue單頁(yè)緩存方案分析及實(shí)現(xiàn)

    vue單頁(yè)緩存方案分析及實(shí)現(xiàn)

    這篇文章主要介紹了vue單頁(yè)緩存方案分析及實(shí)現(xiàn),小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-09-09
  • 面試官問(wèn)你Vue2的響應(yīng)式原理該如何回答?

    面試官問(wèn)你Vue2的響應(yīng)式原理該如何回答?

    可能很多小伙伴之前都了解過(guò)?Vue2實(shí)現(xiàn)響應(yīng)式的核心是利用了ES5的Object.defineProperty?但是面對(duì)面試官時(shí)如果只知道一些模糊的概念。只有深入底層了解響應(yīng)式的原理,才能在關(guān)鍵時(shí)刻對(duì)答如流,本文就來(lái)和大家詳細(xì)聊聊,感興趣的可以收藏一下
    2022-12-12
  • 詳解Nuxt.js部署及踩過(guò)的坑

    詳解Nuxt.js部署及踩過(guò)的坑

    這篇文章主要介紹了詳解Nuxt.js部署及踩過(guò)的坑,Nuxt.js 提供了兩種發(fā)布部署應(yīng)用的方式:服務(wù)端渲染應(yīng)用部署 和 靜態(tài)應(yīng)用部署。本文主要說(shuō)說(shuō)服務(wù)端渲染應(yīng)用部署,感興趣的小伙伴們可以參考一下
    2018-08-08
  • Vue實(shí)現(xiàn)嵌套菜單組件

    Vue實(shí)現(xiàn)嵌套菜單組件

    這篇文章主要為大家詳細(xì)介紹了Vue實(shí)現(xiàn)嵌套菜單組件,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-07-07
  • Vue路由回退頁(yè)面不刷新的原因及解決方案匯總

    Vue路由回退頁(yè)面不刷新的原因及解決方案匯總

    在Vue開發(fā)過(guò)程中,常常會(huì)碰到這樣一種情形:從頁(yè)面A跳轉(zhuǎn)到頁(yè)面B后,點(diǎn)擊瀏覽器回退按鈕返回頁(yè)面A時(shí),頁(yè)面數(shù)據(jù)卻未刷新,依舊保持之前的狀態(tài),這一情況可能會(huì)給用戶帶來(lái)困擾,對(duì)用戶體驗(yàn)產(chǎn)生不良影響,本文將深入探討如何妥善處理此類問(wèn)題,以保證回退頁(yè)面時(shí)數(shù)據(jù)能夠準(zhǔn)確更新
    2024-11-11
  • Vue實(shí)現(xiàn)二維碼數(shù)組的全選與反選功能

    Vue實(shí)現(xiàn)二維碼數(shù)組的全選與反選功能

    在開發(fā)Web應(yīng)用程序時(shí),表格數(shù)據(jù)的展示和操作是非常常見(jiàn)的需求之一,特別是在處理表格中的復(fù)選框選擇時(shí),我們經(jīng)常需要實(shí)現(xiàn)全選、反選等功能,這篇文章將帶你深入了解如何在Vue.js中實(shí)現(xiàn)對(duì)二維數(shù)組數(shù)據(jù)的全選和反選功能,需要的朋友可以參考下
    2024-09-09
  • 用vue設(shè)計(jì)一個(gè)日歷表

    用vue設(shè)計(jì)一個(gè)日歷表

    這篇文章主要介紹了如何用vue設(shè)計(jì)一個(gè)日歷表,幫助大家更好的理解和學(xué)習(xí)vue框架,感興趣的朋友可以了解下
    2020-12-12
  • vue的簡(jiǎn)介及@vue/cli?腳手架的使用示例

    vue的簡(jiǎn)介及@vue/cli?腳手架的使用示例

    vue 是一個(gè) 漸進(jìn)式的javascript框架,腳手架是一個(gè)通用概念,幫助搭建項(xiàng)目的工具,本文以vue2為例結(jié)合實(shí)例代碼給大家詳細(xì)講解,感興趣的朋友跟隨小編一起看看吧
    2022-12-12
  • vue directive全局自定義指令實(shí)現(xiàn)按鈕級(jí)別權(quán)限控制的操作方法

    vue directive全局自定義指令實(shí)現(xiàn)按鈕級(jí)別權(quán)限控制的操作方法

    這篇文章主要介紹了vue directive全局自定義指令實(shí)現(xiàn)按鈕級(jí)別權(quán)限控制,本文結(jié)合實(shí)例代碼對(duì)基本概念做了詳細(xì)講解,需要的朋友可以參考下
    2023-02-02
  • vite+vue3使用@路徑報(bào)錯(cuò)處理

    vite+vue3使用@路徑報(bào)錯(cuò)處理

    本文主要介紹了vite+vue3使用@路徑報(bào)錯(cuò)處理,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-11-11

最新評(píng)論