vue插件--仿微信小程序showModel实现模态提示窗功能

时间:2021-05-26

效果图:

下面是源码:

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: '确认', 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: '确认', 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>

通过添加实例方法,把插件添加到vue.prototype上来实现。

在使用之前需要将插件挂载到Vue全局实例上:

main.js

import VueModel from './components/model/index.js';Vue.use(VueModel);

完成上述条件后,就可以在你的vue项目中使用啦:

this.$model({ show: true, title: "提示", content: "提示内容", cancelButton: true, confirmCallBack: () => { console.log("确认"); }, cancelCallBack: () => { console.log("取消"); }});

总结

到此这篇关于vue插件--仿微信小程序showModel实现模态提示窗的文章就介绍到这了,更多相关微信小程序showModel实现模态提示窗内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!

声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。

相关文章