Vue使用自定義指令打開dialog的實(shí)現(xiàn)方法
完整代碼見:https://codesandbox.io/
1. 寫一個(gè)dialog
既然要展示一個(gè)dialog,那么首先我們需要準(zhǔn)備一個(gè)dialog,供展示用,如下:實(shí)現(xiàn)了一個(gè)簡單的dialog,接收message和visible作為參數(shù)
<template>
<el-dialog
title="提示"
:visible.sync="dialogVisible"
width="30%"
@close="handleClose"
>
<span>這是一段信息: {{ message }}</span>
</el-dialog>
</template>
<script>
export default {
components: {},
props: {
message: {
type: String,
default: "",
},
visible: {
type: Boolean,
default: false,
},
},
data() {
return {
dialogVisible: false,
};
},
watch: {
visible: {
handler: function (v) {
this.dialogVisible = v;
},
immediate: true,
},
},
methods: {
handleClose() {
this.$emit("close");
},
},
};
</script>
<style></style>
2. 用自定義指令來控制dialog
彈窗有了,接下來實(shí)現(xiàn)個(gè)自定義指令來打開它
import Popup from "../components/Popup.vue";
import Vue from "vue";
/**
* 打開彈窗
* @param {Object} binding
*/
const openDialog = (binding) => {
const popupComponent = Vue.extend(Popup);
const instance = new popupComponent({
propsData: {
visible: true,
message: binding.value,
},
});
instance.$mount();
document.body.appendChild(instance.$el);
instance.$on("close", () => {
document.body.removeChild(instance.$el);
instance.$destroy();
});
};
export default {
bind(el, binding) {
const handler = () => {
openDialog(binding);
};
el.addEventListener("click", handler);
el._clickHandler = handler;
},
unbind: function (el) {
el.removeEventListener("click", el._clickHandler);
},
};
3. 每次渲染新的dialog
如上述代碼,我們每次打開都會是一個(gè)新的彈窗,所以visible從外面?zhèn)魅肫鋵?shí)沒什么存在的意義,所以我們將彈窗中的內(nèi)容再改造下,將visible相關(guān)的邏輯刪除,dialogVisible默認(rèn)為true即可。
4.使用該自定義指令
<template>
<div id="app">
<div v-popup="msg">點(diǎn)擊打開彈窗</div>
</div>
</template>
<script>
import popup from "./directives/popup";
export default {
name: "App",
directives: {
popup,
},
data() {
return {
msg: "傳遞的消息",
};
},
};
</script>
效果圖示:

到此這篇關(guān)于Vue使用自定義指令打開dialog的實(shí)現(xiàn)方法的文章就介紹到這了,更多相關(guān)Vue打開dialog內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
使用Webpack提高Vue.js應(yīng)用的方式匯總(四種)
Webpack是開發(fā)Vue.js單頁應(yīng)用程序的重要工具。下面通過四種方式給大家介紹使用Webpack提高Vue.js應(yīng)用,需要的的朋友參考下吧2017-07-07
一文詳解vue3項(xiàng)目實(shí)戰(zhàn)中的接口調(diào)用
在企業(yè)開發(fā)過程中,往往有著明確的前后端的分工,前端負(fù)責(zé)接收、使用接口,后端負(fù)責(zé)編寫、處理接口,下面這篇文章主要給大家介紹了關(guān)于vue3項(xiàng)目實(shí)戰(zhàn)中的接口調(diào)用的相關(guān)資料,需要的朋友可以參考下2022-12-12
vue+watermark-dom實(shí)現(xiàn)頁面水印效果(示例代碼)
watermark.js 是基于 DOM 對象實(shí)現(xiàn)的 BS 系統(tǒng)的水印,確保系統(tǒng)保密性,安全性,降低數(shù)據(jù)泄密風(fēng)險(xiǎn),簡單輕量,支持多屬性配置,本文將通過 vue 結(jié)合 watermark-dom 庫,教大家實(shí)現(xiàn)簡單而有效的頁面水印效果,感興趣的朋友跟隨小編一起看看吧2024-07-07
Vue動態(tài)加載圖片在跨域時(shí)無法顯示的問題及解決方法
這篇文章主要介紹了解決VUE動態(tài)加載圖片在跨域時(shí)無法顯示的問題,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-03-03
用vue-cli開發(fā)vue時(shí)的代理設(shè)置方法
今天小編就為大家分享一篇用vue-cli開發(fā)vue時(shí)的代理設(shè)置方法,具有很好的參考價(jià)值。希望對大家有所幫助。一起跟隨小編過來看看吧2018-09-09
vue長列表優(yōu)化之虛擬列表實(shí)現(xiàn)過程詳解
前端的業(yè)務(wù)開發(fā)中會遇到不使用分頁方式來加載長列表的需求,下面這篇文章主要給大家介紹了關(guān)于vue長列表優(yōu)化之虛擬列表實(shí)現(xiàn)的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-08-08

