标签:Vue extend Component showDialog options 弹窗
利用Vue.extend生成全局弹窗
效果
弹窗组件
<template>
<div class="dialog" v-if="isVisible">
<div class="mask" />
<div class="info">
<button @click="handleClose">关闭</button>
<p>弹窗内容</p>
</div>
</div>
</template>
<script>
export default {
name: 'Dialog',
data() {
return {
isVisible: false
}
},
methods: {
showDialog() {
this.isVisible = true
},
handleClose() {
this.isVisible = false
}
}
}
</script>
<style>
.mask {
position: fixed;
z-index: 1100;
width: 100%;
height: 100%;
top: 0;
left: 0;
background: #000;
opacity: .6;
}
.info {
width: 600px;
height: 700px;
position: absolute;
background-color: #fff;
z-index: 1101;
}
</style>
Vue.extend创建ComponentConstructor
import Component from './dialog.vue'
Component.install = Vue => {
const getInstance = (options) => {
const ComponentConstructor = Vue.extend(Component)
return new ComponentConstructor({
el: document.createElement('div'),
propsData: options
})
}
Vue.prototype.$showDialog = (options) => {
const instance = getInstance(options)
document.body.appendChild(instance.$el)
Vue.nextTick(() => {
instance.showDialog()
})
}
}
export default Component
使用
import Vue from 'vue'
import Dialog from './components/index'
Vue.use(Dialog)
methods: {
handleShowDialog() {
this.$showDialog()
}
}
标签:Vue,extend,Component,showDialog,options,弹窗 来源: https://www.cnblogs.com/chenfengami/p/14719555.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。