android 自定义dialog_高质量 Vue.js 自定义弹窗组件VPopup

起因

很早之前就有写过一个wcPop.js弹窗插件,并且在h5酒店预订、h5聊天室项目中都有使用过,效果还不错。当初想着有时间整合一个Vue版本,刚好趁着国庆节空闲时间捣鼓了个vue.js版自定义模态弹出框组件VPopup

2cb2530444be5c6c6cc2b8ee5c9aa11e.png

v-popup 一款聚合Msg、Dialog、Popup、ActionSheet、Toast等功能的轻量级移动端Vue弹窗组件。

11d361733f314093eb33075ef23f591d.gif

整合了有赞Vant及NutUI等热门Vue组件库中Popup弹出层、Toast轻提示、Notify消息提示、Dialog对话框及ActionSheet动作面板等功能。

7974a59cb26c92fd3f0db87201f23a91.gif

使用组件

// 在main.js中全局引入import Vue from 'vue'import Popup from './components/popup'Vue.use(Popup)

支持如下两种方式调用组件。

  • 标签式调用
  • 函数式调用

this.$vpopup({...}),传入参数即可使用,该函数会返回弹窗组件实例。

let $el = this.$vpopup({  title: '标题内容',  content: '弹窗内容,描述文字尽量控制在三行内',  type: 'android',  shadeClose: false,  xclose: true,  zIndex: 2000,  btns: [    {text: '取消'},    {      text: '确认',      style: 'color:#f60;',      click: () => {        $el.close()      }    },  ]});

你可根据喜好或项目需要任意选择一种调用方式即可。下面就开始讲解下组件的实现。

在components目录下新建popup.vue页面。

60150626b929308c4fbd2da6f3861ee1.png

组件参数配置

通过监听v-model值调用open和close方法。

watch: {    value(val) {        const type = val ? 'open' : 'close';        this[type]();    },},
a73e86f56144e2e2505adcaa1fbb6077.png
0550a908b1da96a978b75cd03fa324da.png
675592f530971f81143068a0a88f248c.png
32ae5964620d7dc0b362a7e9e95ec317.png
f0215350a6b6813b832ec4e6f3932b3c.png

如果想要实现函数式调用this.$vpopup({...}),则需要使用到Vue.extend扩展实例构造器。

import Vue from 'vue';import VuePopup from './popup.vue';let PopupConstructor = Vue.extend(VuePopup);let $instance;let VPopup = function(options = {}) {    // 同一个页面中,id相同的Popup的DOM只会存在一个    options.id = options.id || 'nuxt-popup-id';    $instance = new PopupConstructor({        propsData: options    });    $instance.vm = $instance.$mount();        let popupDom = document.querySelector('#' + options.id);    if(options.id && popupDom) {        popupDom.parentNode.replaceChild($instance.$el, popupDom);    } else {        document.body.appendChild($instance.$el);    }    Vue.nextTick(() => {        $instance.value = true;    })    return $instance;}VPopup.install = () => {    Vue.prototype['$vpopup'] = VPopup;    Vue.component('v-popup', VuePopup);}export default VPopup;

这样就实现了引入 Popup 组件后,会自动在 Vue 的 prototype 上挂载 $vpopup 方法和注册 v-popup 组件。

下面就可以愉快的使用标签式及函数式调用组件了。

  • 设置圆角及关闭按钮
76564c0ed6c9bea0c35ed2c48f65f749.gif
双肩包 鞋子 运动裤 双肩包 鞋子 运动裤
  • 设置按钮禁用状态

按钮设置disabled: true即可禁用按钮事件。

0447d62203e3efc31a3b30fc2cc35b24.gif
b614008e8f8a331437c03ceb79851898.png
5ef6be877cc5f8413781f984f8d9372f.png
6f4b0468677c6cf1604aeff29473b6d1.png
bedc67b701ac7495cb867c9f47d52b3c.png
32c086b8dbadec410b15240c45c7d5e7.png

另外还支持自定义slot插槽内容,当 content 和 自定义插槽 内容同时存在,只显示插槽内容。

当 content 和 自定义插槽 内容同时存在,只显示插槽内容!

好了,就分享到这里。希望对大家有所帮助。目前该组件正在项目中实战测试,后续会分享相关使用情况。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值