vue弹窗插件实战代码
vue做移动端经常碰到弹窗的需求,这里写一个功能简单的vue弹窗 popup.vue 组件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个方法触发对应的事件 测试一下 插件化组件功能写好了,但是这种调用方式显得很累赘。举个例子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]
}
}
export default {
install(Vue) { let $vm = factory(Vue); const popup = { Vue.prototype.$popup = popup 在main.js内注册插件 Vue.use(PopupPlugin)
在vue框架内调用就非常方便了 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持编程之家。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |