vue插件--仿微信小程序showModel實(shí)現(xiàn)模態(tài)提示窗功能
效果圖:

下面是源碼:
index.js
import Vue from 'vue';
import model from './model.vue';
export default {
install(Vue) {
const defaults = {
show: false,
mask: true,
title: '提示',
content: '這是正文',
confirmButton: true,
cancelButton: true,
confirmText: '確認(rèn)',
cancelText: '取消',
cancelCallBack: () => {},
confirmCallBack: () => {}
};
const modelVueConstructor = Vue.extend(model);
Vue.prototype.$model = (options = {}) => {
if (Vue.prototype.$isServer) return;
options = Object.assign({}, defaults, options);
let parent = document.body ;
let instance = new modelVueConstructor({
el: document.createElement('div'),
data: options
});
parent.appendChild(instance.$el);
return instance;
};
},
};
model.vue
<template>
<div v-if="show" class="model-container">
<div class="model-main">
<div class="model-title">{{title}}</div>
<div class="model-content" v-html="content"></div>
<div class="model-buttons">
<button v-if="cancelButton" @click="cancelClick" class="button">{{cancelText}}</button>
<button v-if="confirmButton" @click="confirmClick" class="button confirm">{{confirmText}}</button>
</div>
</div>
<div v-show="mask" class="model-mask"></div>
</div>
</template>
<script type="text/babel">
export default {
data() {
return {
show: false,
mask: true,
title: '提示',
content: '這是正文',
confirmButton: true,
cancelButton: true,
confirmText: '確認(rèn)',
cancelText: '取消',
cancelCallBack: () => {},
confirmCallBack: () => {}
};
},
methods: {
cancelClick(){
this.show = false;
this.cancelCallBack();
},
confirmClick(){
this.show = false;
this.confirmCallBack();
}
}
};
</script>
<style lang="less" scoped>
.model-container{
width: 100%;
height: 100vh;
position: fixed;
top: 0;
left: 0;
z-index: var(--model-index);
display: flex;
justify-content: center;
align-items: center;
.model-main{
position: relative;
z-index: 9;
width: 80%;
background-color: #ffffff;
border-radius: 10px;
overflow: hidden;
text-align: center;
.model-title{
font-size: 18px;
color: #333;
width: 100%;
padding: 18px;
font-weight: bold;
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis;
}
.model-content{
font-size: 16px;
color: #666;
padding: 10px;
padding-top: 0px;
padding-bottom: 20px;
}
.model-buttons{
width: 100%;
display: flex;
align-items: center;
.button{
flex: 1;
padding: 18px 10px;
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis;
font-size: 16px;
outline: none;
background-color: #ffffff;
border-top: 1px solid #f2f2f2;
border-right: 1px solid #f2f2f2;
&.confirm{
color: var(--theme);
font-weight: bold;
}
&:last-child{
border-right: 0;
}
&:active{
background-color: #f2f2f2;
}
}
}
}
.model-mask{
width: 100%;
height: 100%;
position: absolute;
top: 0;
left: 0;
z-index: 1;
background-color: rgba(0,0,0,0.45);
}
}
</style>
通過(guò)添加實(shí)例方法,把插件添加到vue.prototype上來(lái)實(shí)現(xiàn)。
在使用之前需要將插件掛載到Vue全局實(shí)例上:
main.js
import VueModel from './components/model/index.js'; Vue.use(VueModel);
完成上述條件后,就可以在你的vue項(xiàng)目中使用啦:
this.$model({
show: true,
title: "提示",
content: "提示內(nèi)容",
cancelButton: true,
confirmCallBack: () => {
console.log("確認(rèn)");
},
cancelCallBack: () => {
console.log("取消");
}
});
總結(jié)
到此這篇關(guān)于vue插件--仿微信小程序showModel實(shí)現(xiàn)模態(tài)提示窗的文章就介紹到這了,更多相關(guān)微信小程序showModel實(shí)現(xiàn)模態(tài)提示窗內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Vue.js列表渲染綁定jQuery插件的正確姿勢(shì)
這篇文章主要為大家詳細(xì)介紹了Vue.js列表渲染綁定jQuery插件的正確姿勢(shì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-06-06
在Vue中實(shí)現(xiàn)Excel導(dǎo)出功能(數(shù)據(jù)導(dǎo)出)
本文分享了如何在前端導(dǎo)出Excel文件,強(qiáng)調(diào)了前端導(dǎo)出的即時(shí)性、便捷性、靈活性和定制化優(yōu)勢(shì),以及減輕后端服務(wù)器負(fù)擔(dān)的特點(diǎn),詳細(xì)介紹了ExcelJS和FileSaver.js兩個(gè)工具庫(kù)的使用方法和主要功能,最后通過(guò)Vue實(shí)現(xiàn)了Excel的導(dǎo)出功能2024-10-10
Vue實(shí)現(xiàn)導(dǎo)航欄的顯示開(kāi)關(guān)控制
今天小編就為大家分享一篇Vue實(shí)現(xiàn)導(dǎo)航欄的顯示開(kāi)關(guān)控制,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-11-11
Vue結(jié)合路由配置遞歸實(shí)現(xiàn)菜單欄功能
這篇文章主要介紹了Vue結(jié)合路由配置遞歸實(shí)現(xiàn)菜單欄,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)火鍋工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-06-06
vue項(xiàng)目中使用qrcodesjs2生成二維碼簡(jiǎn)單示例
最近項(xiàng)目中需生成二維碼,發(fā)現(xiàn)了很好用的插件qrcodesjs2,所以下面這篇文章主要給大家介紹了關(guān)于vue項(xiàng)目中使用qrcodesjs2生成二維碼的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2023-05-05
vue使用neovis操作neo4j圖形數(shù)據(jù)庫(kù)及優(yōu)缺點(diǎn)
這篇文章主要介紹了vue使用neovis操作neo4j圖形數(shù)據(jù)庫(kù),本文給大家介紹了與常規(guī)做法的優(yōu)缺點(diǎn)對(duì)比及使用技巧,對(duì)vue?neo4j圖形數(shù)據(jù)庫(kù)相關(guān)知識(shí)感興趣的朋友一起看看吧2022-02-02
淺談vue在html中出現(xiàn){{}}的原因及解決方式
這篇文章主要介紹了淺談vue在html中出現(xiàn){{}}的原因及解決方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-11-11

