您好,欢迎来到三六零分类信息网!老站,搜索引擎当天收录,欢迎发信息

vue中弹窗插件的应用方法(代码)

2025/11/6 3:16:57发布5次查看
本篇文章给大家带来的内容是关于vue中弹窗插件的应用方法(代码),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。
vue做移动端经常碰到弹窗的需求, 这里写一个功能简单的vue弹窗
popup.vue<template>  <div class="popup-wrapper" v-show="visible" @click="hide">    <div class="popup-text">{{text}}</div>  </div></template>
组件html结构, 外层pposition:fixed定位, 内层p显示弹窗内容
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个方法触发对应的事件
测试一下
<template>  <popup ref="popup" text="弹窗内容" :time="1e3"></popup></template><script>import popup from '@/components/popup'  ...    this.$refs.popup.open()   ...</script>
插件化组件功能写好了,但是这种调用方式显得很累赘。举个例子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('p')    })    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框架内调用就非常方便了
<script>  ...    this.$popup.text('弹窗消息')  ...</script>
相关推荐:
在vue项目中如何使用sweetalert2弹窗插件
怎样使用vue的toast弹窗组件
以上就是vue中弹窗插件的应用方法(代码)的详细内容。
该用户其它信息

VIP推荐

免费发布信息,免费发布B2B信息网站平台 - 三六零分类信息网 沪ICP备09012988号-2
企业名录 Product