Vue3實(shí)現(xiàn)自定義指令攔截點(diǎn)擊事件的示例代碼
案例使用Vue3舉例,如在Vue2中使用思路是一致的,語法稍有區(qū)別。
問題
某些應(yīng)用場(chǎng)景會(huì)給點(diǎn)擊事件添加權(quán)限,不存在權(quán)限就 攔截 點(diǎn)擊事件(或觸發(fā)其他業(yè)務(wù)事件),有權(quán)限就繼續(xù)正常 觸發(fā) 點(diǎn)擊事件。如果用封裝組件的方法,在使用三方UI庫的情況下,封裝成本過大,并不劃算。
解決方案案例
邏輯
main.ts
// main.ts // 舉例案例 直接在初始化為全局自定義指令
import { createApp } from "vue";
import "./style.css";
import App from "./App.vue";
import router from "./router/router";
import * as echarts from 'echarts';
import ElementPlus from 'element-plus';
import 'element-plus/dist/index.css';
const app = createApp(App);
app.use(router);
app.use(ElementPlus)
// 邏輯封裝
const customClick = (binding: any) => {
return () =>{
if (true) { // 判斷條件
// 正常觸發(fā)點(diǎn)擊事件
binding.value();
} else {
// 已經(jīng)成功攔截點(diǎn)擊事件
console.log('已經(jīng)成功攔截點(diǎn)擊事件');
};
};
};
// 全局自定義指令
app.directive('custom',{
created(el, binding, vnode, prevVnode) {
el.addEventListener('click', customClick(binding));
},
// 離開一定要銷毀卸載
unmounted(el, binding, vnode) {
el.removeEventListener('click', customClick);
},
});
app.mount("#app");頁面中的使用
<template> <!--函數(shù)不帶括號(hào)--> <button v-custom="onClick">test按鈕</button> <el-button type="primary" v-custom="onClickTest1">Primary</el-button> <!--函數(shù)帶括號(hào) 可傳值--> <button v-custom="() => onClick()">test按鈕</button> <el-button type="primary" v-custom="() => onClickTest1(233)">Primary</el-button> </template>
<script lang="ts" setup >
const onClick = () => {
console.log('_____函數(shù)不帶括號(hào)');
};
const onClickTest1 = (num: number) => {
console.log('_____函數(shù)帶括號(hào) 可傳值');
};
</script>邏輯封裝還存在優(yōu)化點(diǎn),后續(xù)在持續(xù)優(yōu)化。
到此這篇關(guān)于Vue3實(shí)現(xiàn)自定義指令攔截點(diǎn)擊事件的示例代碼的文章就介紹到這了,更多相關(guān)Vue3自定義指令攔截點(diǎn)擊事件內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
詳解在vue-cli中使用graphql即vue-apollo的用法
這篇文章主要介紹了詳解在vue-cli中使用graphql即vue-apollo的用法,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2018-09-09
如何在Vue項(xiàng)目中添加接口監(jiān)聽遮罩
這篇文章主要介紹了如何在Vue項(xiàng)目中添加接口監(jiān)聽遮罩,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-01-01
Vue實(shí)現(xiàn)點(diǎn)擊后文字變色切換方法
下面小編就為大家分享一篇Vue實(shí)現(xiàn)點(diǎn)擊后文字變色切換方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2018-02-02
手寫Vue源碼之?dāng)?shù)據(jù)劫持示例詳解
這篇文章主要給大家介紹了手寫Vue源碼之?dāng)?shù)據(jù)劫持的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-01-01
Vue項(xiàng)目之學(xué)生管理系統(tǒng)實(shí)例詳解
這篇文章主要為大家詳細(xì)介紹了Vue項(xiàng)目之學(xué)生管理系統(tǒng)實(shí)例,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助2022-03-03

