vue中如何实现一个弹窗插件
发表于:2026-11-02 作者:千家信息网编辑
千家信息网最后更新 2026年11月02日,这篇文章主要介绍"vue中如何实现一个弹窗插件",在日常操作中,相信很多人在vue中如何实现一个弹窗插件问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答"vue中如何实现一
千家信息网最后更新 2026年11月02日vue中如何实现一个弹窗插件
这篇文章主要介绍"vue中如何实现一个弹窗插件",在日常操作中,相信很多人在vue中如何实现一个弹窗插件问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答"vue中如何实现一个弹窗插件"的疑惑有所帮助!接下来,请跟着小编一起来学习吧!
popup.vue
{{text}}
组件html结构, 外层divposition:fixed定位, 内层div显示弹窗内容
export default { name: 'popup', props: { text: { //文字内容 type: String, default: '' }, time: { //显示的时长 type: Number, default: 3e3 }, }, data(){ return { visible: false } }, methods: { open() { this.visible = true clearTimeout(this.timeout); this.$emit('show') if(this.time > 0){ this.timeout = setTimeout(() => { this.hide() }, this.time) } }, hide() { this.visible = false this.$emit('hide') clearTimeout(this.timeout); } }}popup.vue只有2个属性: 文本和显示时间。组件显示隐藏由内部属性visible控制,只暴露给外界open和hide2个方法,2个方法触发对应的事件
测试一下
插件化
组件功能写好了,但是这种调用方式显得很累赘。举个例子layer.js的调用就是layer.open(...)没有import,没有ref,当然要先全局引用layer。我们写的弹窗能不能这么方便呢,为此需要把popup改写成vue插件。
说是插件,但能配置属性调用方法的还是组件本身,具体是实例化的组件,而且这个实例必须是全局单例,这样不同vue文件唤起popup的时候才不会打架
生成单例
// plugins/popupVm.jsimport Popup from '@/components/popup'let $vmexport const factory = (Vue)=> { if (!$vm) { let Popup = Vue.extend(PopupComponent) $vm = new Popup({ el: document.createElement('div') }) document.body.appendChild($vm.$el) } return $vm}组件实例化后是添加在body上的,props不能写在html里需要js去控制,这里写个方法让属性默认值继续发挥作用
// plugins/util.jsexport const setProps = ($vm, options) => { const defaults = {} Object.keys($vm.$options.props).forEach(k => { defaults[k] = $vm.$options.props[k].default }) const _options = _.assign({}, defaults, options) for (let i in _options) { $vm.$props[i] = _options[i] }}// plugins/popupPlugin.jsimport { factory } from './popupVm'import { setProps } from './util'export default { install(Vue) { let $vm = factory(Vue); const popup = { open(options) { setProps($vm, options) //监听事件 typeof options.onShow === 'function' && $vm.$once('show', options.onShow); typeof options.onHide === 'function' && $vm.$once('hide', options.onHide); $vm.open(); }, hide() { $vm.hide() }, //只配置文字 text(text) { this.open({ text }) } } Vue.prototype.$popup = popup }}在main.js内注册插件
//main.jsimport Vue from 'vue'import PopupPlugin from '@/plugins/popupPlugin'Vue.use(PopupPlugin)在vue框架内调用就非常方便了
到此,关于"vue中如何实现一个弹窗插件"的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注网站,小编会继续努力为大家带来更多实用的文章!
插件
组件
方法
属性
学习
实例
事件
全局
内容
文字
更多
帮助
控制
配置
不同
实用
累赘
为此
接下来
作用
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
广州为想互联网科技有限公司
新华互联网科技
互联网科技产业
互联网佳科技有限公司
互联网科技巨头监管
科技制造互联网公司
互联网 科技创新
互联网科技作文
奇酷互联网科技公司
互联网科技革命
融贸通互联网科技
互联网科技热点资讯
互联网系的金融科技公司
互联网时代科技改变生活
科技大学互联网
济南有互联网科技公司吗
互联网方面的科技前沿
美国互联网科技公司
绵阳真晨互联网科技有限公司
杭州科技互联网公司有哪些
互联网最新的科技有限公司
互联网科技公司发展
互联网与未来科技
互联网科技革命
海南科技产业互联网平台
互联网与医疗科技
健康食品互联网创新科技园项目
互联网时代高科技布局
华人运通互联网科技公司
颐高云石互联网科技