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

vue使用自定義指令來控制頁面按鈕組的權限思想

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

自定義指令來控制頁面按鈕組的權限思想

在vuejs中, 我們可以自定義一些指令,來控制一些按鈕加載之前的動作, 比如現有的 v-if 或者 v-show

這些功能是我們可以手寫的, 現在們來做一個初級的頁面級的權限控制的例子

vue自定義指令

<template>
? <div class="table-wrapper">
? ? <div class="action-bar">
? ? ?? ?//v-hasProm ?指令是說 如果指令中value 包含在 data.promission 數組中, 就把這個按鈕顯示出來?
? ? ? <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",
? //這里添加了一個局部指令 (只作用于本面頁)
? directives:{
? ? hasProm:{
? ? ? inserted(el,binding,vnode){
? ? ? ? console.log(el,binding,vnode);
? ? ? ? //這里要說一下 這三個參數
? ? ? ? // el就是 指令所在的 元素(element) ? 我們可以使用 ?el.style.dispaly='none' 來對el 的css進行設置
? ? ? ? //binding 是指的binding 的信息, 其中可以得到我們 v-hasProm = value 中的 ?value值
? ? ? ? //vnode 就是指的虛擬節(jié)點, 我們可以通過它, 得到當前頁面中的 ?component.data 中的數據 也就是promission 數組長 ?頁面的 this 在指令中是得不到了, 我們能過 ?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){
?? ??? ??? ?//說明在數組中沒有這個權限, 把這個元素給隱藏
?? ??? ??? ?el.style.display="none"
?? ??? ?}
?? ??? ?
? ? ? }
? ? }
? },
? data(){
? ? return {
? ? ?? ?promission:["admin.goods.add","admin.goods.edit","admin.goods.delete"]
? ? ?? ?//上面的權限更表 以字符串開式, 這個其實可以從后端獲取得到, 然后放在store中, 全局可使用, 這里就寫在data中算了
? ? }
? },
? created() {
? },
? methods:{
? }
}
</script>
<style scoped>
</style>

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

vue添加按鈕權限~通過自定義指令

1、需求

客戶:需要把導入、刪除權限化;指定人員有權限;

2、思路

后臺有一個接口,是可以查詢到當前登錄人的權限;

前端方案:

1.每到一個頁面就請求一次接口是否有權限;(太麻煩了)

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

3、代碼實現

1.自定義指令

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

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

2.注冊指令

創(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里面進行全局注冊 

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

vue官網對指令的解釋

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"/>

以上為個人經驗,希望能給大家一個參考,也希望大家多多支持腳本之家。 

相關文章

  • 如何使用sm4js進行加密和國密sm4總結

    如何使用sm4js進行加密和國密sm4總結

    近期由于公司項目的需要開始研究國密SM4加密,下面這篇文章主要給大家介紹了關于如何使用sm4js進行加密和國密sm4的相關資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2023-04-04
  • vue Tab切換以及緩存頁面處理的幾種方式

    vue Tab切換以及緩存頁面處理的幾種方式

    這篇文章主要介紹了vue Tab切換以及緩存頁面處理的幾種方式,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-11-11
  • 解決vue props 拿不到值的問題

    解決vue props 拿不到值的問題

    今天小編就為大家分享一篇解決vue props 拿不到值的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-09-09
  • vue.js移動端tab組件的封裝實踐實例

    vue.js移動端tab組件的封裝實踐實例

    本篇文章主要介紹了vue.js移動端tab的封裝實踐實例,小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-06-06
  • vue實現無限消息無縫滾動

    vue實現無限消息無縫滾動

    這篇文章主要為大家詳細介紹了vue實現無限消息無縫滾動,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-04-04
  • vue jsx 使用指南及vue.js 使用jsx語法的方法

    vue jsx 使用指南及vue.js 使用jsx語法的方法

    這篇文章主要介紹了vue jsx 使用指南及vue.js 使用jsx語法的方法,非常不錯,具有參考借鑒價值,需要的朋友可以參考下
    2017-11-11
  • Monaco?Editor開發(fā)SQL代碼提示編輯器實例詳解

    Monaco?Editor開發(fā)SQL代碼提示編輯器實例詳解

    這篇文章主要為大家介紹了Monaco?Editor開發(fā)SQL編輯器實例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-08-08
  • vue3+ts中ref與reactive指定類型實現示例

    vue3+ts中ref與reactive指定類型實現示例

    這篇文章主要為大家介紹了vue3+ts中ref及reactive如何指定類型的實現示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-06-06
  • 解決vue組件中click事件失效的問題

    解決vue組件中click事件失效的問題

    今天小編就為大家分享一篇解決vue組件中click事件失效的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-11-11
  • Vue利用自定義指令實現按鈕權限控制

    Vue利用自定義指令實現按鈕權限控制

    這篇文章主要為大家詳細介紹了Vue如何利用自定義指令實現按鈕權限控制效果,文中的示例代碼講解詳細,具有一定的學習價值,需要的可以參考下
    2023-05-05

最新評論