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>
通過添加實(shí)例方法,把插件添加到vue.prototype上來實(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中img的src是動(dòng)態(tài)渲染時(shí)不顯示的解決
今天小編就為大家分享一篇Vue中img的src是動(dòng)態(tài)渲染時(shí)不顯示的解決,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2019-11-11
el-dialog關(guān)閉再打開后窗口內(nèi)容不刷新問題及解決
這篇文章主要介紹了el-dialog關(guān)閉再打開后窗口內(nèi)容不刷新問題及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-02-02
Vue項(xiàng)目環(huán)境搭建詳細(xì)總結(jié)
這篇文章主要為大家介紹了Vue項(xiàng)目環(huán)境搭建總結(jié)篇,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-09-09
Vue2.0學(xué)習(xí)之詳解Vue 組件及父子組件通信
本篇文章主要介紹了Vue2.0學(xué)習(xí)之詳解Vue 組件及父子組件通信,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-12-12
vue使用moment如何將時(shí)間戳轉(zhuǎn)為標(biāo)準(zhǔn)日期時(shí)間格式
這篇文章主要介紹了vue使用moment如何將時(shí)間戳轉(zhuǎn)為標(biāo)準(zhǔn)日期時(shí)間格式問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-05-05
vue3 學(xué)習(xí)筆記之a(chǎn)xios的使用變化總結(jié)
本篇文章主要旨在幫助正在學(xué)vue3或者準(zhǔn)備學(xué)vue3的同學(xué)了解網(wǎng)絡(luò)請(qǐng)求axios該如何使用,防止接觸了一點(diǎn)點(diǎn)vue3的同學(xué)會(huì)有個(gè)疑問。有興趣的小伙伴可以關(guān)注一下2021-11-11
vue,angular,avalon這三種MVVM框架優(yōu)缺點(diǎn)
本文給大家具體分析了下vue,angular,avalon這三種MVVM框架優(yōu)缺點(diǎn),十分的細(xì)致全面,有需要的小伙伴可以參考下2016-04-04

