這是我參與更文挑戰的第 17 天,活動詳情查看: 更文挑戰html
前文【專欄-效率工具】系列文章,從開發工具、版本控制工具、接口調試工具 到 開發規範,再到博客搭建工具等等, 固然還有許多工具須要咱們慢慢探索的,工做學習中用到的工具,分別一一做了介紹,養成習慣,提升開發效率,減小 bug 數量等等。這裏碼上幾篇連接:vue
【接口調試工具-Insomnia】、node
【效率工具】下一代接口模擬工具-mock service worker...-,-、markdown
記錄提升平常碼字幸福感的【實測能用】自用效率工具,持續更新、記錄app
僅當參考,按需食用,不足之處,歡迎各路大佬不吝賜教,補充完善,歡迎分享async
CodeStyle
),代碼段等。爲剛融入團隊的新同窗能夠迅速 follow
團隊的開發規範,快速融入到項目開發中,提升咱們的工做效率,減小累贅代碼,提升代碼質量,減小bug
.Vue-Directives
v-permission
這裏做簡單的權限介紹, 經過傳入值控制是否顯示按鈕,具體邏輯以下,再複雜權限 則根據需求進一步深刻探究svg
// directives/permission.js
function checkArray(key) {
let arr = ['1', '2', '3', '4', 'demo']
let index = arr.indexOf(key)
if (index > -1) {
return true // 有權限
} else {
return false // 無權限
}
}
const permission = {
inserted: function (el, binding) {
let permission = binding.value // 獲取到 v-permission的值
if (permission) {
let hasPermission = checkArray(permission)
if (!hasPermission) {
// 沒有權限 移除Dom元素
console.log('el: ', el)
console.log('el.parentNode: ', el.parentNode)
el.parentNode && el.parentNode.removeChild(el)
}
}
},
}
export default permission
複製代碼
// directives/index.js
import permission from './permission'
...
// 自定義指令
const directives = {
waterMarker,
permission,
...
}
// 批量註冊指令
export default {
install(Vue) {
Object.keys(directives).forEach((key) => {
Vue.directive(key, directives[key])
})
}
}
複製代碼
// main.js
import install from './directives'
Vue.use(install)
複製代碼
<div class="btns">
<!-- 1 2 3 4 demo 顯示 -->
<button v-permission="'1'">權限按鈕1</button>
<button v-permission="'2'">權限按鈕2</button>
<button v-permission="'demo'">權限按鈕demo</button>
<!-- 5 不顯示 -->
<button v-permission="'5'">權限按鈕5</button>
</div>
複製代碼
在 perssion.js
中的邏輯 不包含 '5'
,故只顯示 權限按鈕1
、權限按鈕2
、權限按鈕demo
, 權限按鈕5
不顯示函數
指令在邏輯js文件中已註冊,而後在 main.js
中引入便可工具
// main.js
import './directives'
複製代碼
具體邏輯以下:
// src/directives/visible.js
import Vue from 'vue'
function handler(el, binding) {
if (el) {
const visible = Boolean(binding.value)
el.style.visibility = visible ? 'visible' : 'hidden'
}
}
const visible = Vue.directive('visible', {
bind: async function (el, binding, vnode, oldVnode) {
handler(el, binding)
},
update(el, binding, vnode, oldVnode) {
handler(el, binding)
},
})
export default visible
複製代碼
<span v-visible="allowSetDefault" class="icon-btn color-orange" @click="handleSetDefault">
置爲默認
</span>
<a v-visible="!isEditing" class="icon-btn" @click="startEdit">
編輯
</a>
<a v-visible="isEditing" class="icon-btn color-green" @click="handleSave">
保存
</a>
<span v-visible="allowRemove" v-permission="uiPermission.leadDetailContactDelete" class="icon-btn del" @click="remove">
刪除
</span>
複製代碼
這裏列舉部分僅做參考,拋磚引玉,
有沒有
get
到呢?
歡迎各路大神評論出你的私藏工具, 把你的好用的【效率工具】分享給你們=,=
繼續更新 分享一些積累的 codes
/utils
/components
/styles
等等吧
下一篇敬請期待! hahah~