vue弹窗插件实战代码

vue做移动端经常碰到弹窗的需求,这里写一个功能简单的vue弹窗

popup.vue

rush:js;">

组件html结构,外层divposition:fixed定位,内层div显示弹窗内容

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

测试一下

rush:js;">

插件

组件功能写好了,但是这种调用方式显得很累赘。举个例子layer.js的调用就是layer.open(...)没有import,没有ref,当然要先全局引用layer。我们写的弹窗能不能这么方便呢,为此需要把popup改写成vue插件。 说是插件,但能配置属性调用方法的还是组件本身,具体是实例化的组件,而且这个实例必须是全局单例,这样不同vue文件唤起popup的时候才不会打架

生成单例

{ 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去控制,这里写个方法属性认值继续发挥作用

{ 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] } }
rush:js;"> // plugins/popupPlugin.js import { 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内注册插件

rush:js;"> //main.js import Vue from 'vue' import PopupPlugin from '@/plugins/popupPlugin'

Vue.use(PopupPlugin)
在vue框架内调用就非常方便了

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持编程之家。

相关文章

可以通过min-width属性来设置el-table-column的最小宽度。以...
yarn dev,当文件变动后,会自动重启。 yanr start不会自动重...
ref 用于创建一个对值的响应式引用。这个值可以是原始值(如...
通过修改 getWK005 函数来实现这一点。这里的 query 参数就是...
<el-form-item label="入库类型" ...
API 变动 样式类名变化: 一些组件的样式类名有所变动,可能需...