我的编程空间,编程开发者的网络收藏夹
学习永远不晚

vue如何实现一个弹窗插件

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

vue如何实现一个弹窗插件

这篇文章主要讲解了“vue如何实现一个弹窗插件”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“vue如何实现一个弹窗插件”吧!

popup.vue

<template> <div class="popup-wrapper" v-show="visible" @click="hide">  <div class="popup-text">{{text}}</div> </div></template>

组件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个方法触发对应的事件

测试一下

<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('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框架内调用就非常方便了<script> ...  this.$popup.text('弹窗消息') ...</script>

Vue的优点

Vue具体轻量级框架、简单易学、双向数据绑定、组件化、数据和结构的分离、虚拟DOM、运行速度快等优势,Vue中页面使用的是局部刷新,不用每次跳转页面都要请求所有数据和dom,可以大大提升访问速度和用户体验。

感谢各位的阅读,以上就是“vue如何实现一个弹窗插件”的内容了,经过本文的学习后,相信大家对vue如何实现一个弹窗插件这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是编程网,小编将为大家推送更多相关知识点的文章,欢迎关注!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

vue如何实现一个弹窗插件

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

vue如何实现一个弹窗插件

这篇文章主要讲解了“vue如何实现一个弹窗插件”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“vue如何实现一个弹窗插件”吧!popup.vue