vue做移动端经常碰到弹窗的需求,这里写一个功能简单的vue弹窗
popup.vue
组件html结构,外层divposition:fixed定位,内层div显示弹窗内容
popup.vue只有2个属性: 文本和显示时间。组件显示隐藏由内部属性visible控制,只暴露给外界open和hide2个方法,2个方法触发对应的事件
测试一下
插件化
组件功能写好了,但是这种调用方式显得很累赘。举个例子layer.js的调用就是layer.open(...)没有import,没有ref,当然要先全局引用layer。我们写的弹窗能不能这么方便呢,为此需要把popup改写成vue插件。 说是插件,但能配置属性调用方法的还是组件本身,具体是实例化的组件,而且这个实例必须是全局单例,这样不同vue文件唤起popup的时候才不会打架
生成单例
组件实例化后是添加在body上的,props不能写在html里需要js去控制,这里写个方法让属性默认值继续发挥作用
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
}
}
Vue.use(PopupPlugin)
在vue框架内调用就非常方便了
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持编程之家。
原文地址:https://www.jb51.cc/vue/30349.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。