手动添加dialog,满满干货!

利用vue.extend和$mount实现一个全局的dialog

step1:

//App.vue
既然是全局dialog,需要在App文件中添加个固定位置,方便在任何组件调用
<div id="app">
...
	<div id="root-dialog"></div>
...
</div>

step2:

//dialog.vue
<template>
//自己想定义的组件的样式,此处省略
	<div v-if="showDialog">{{message}}</div>
</template>
<script>
export default{
	data(){
		return{
			showDialog:false,
			message:"我是个dialog组件"
		}
	}
}
</script>

step3

在这里插入图片描述

//为dialog添加js控制,增加自己的一些配置项
import Dialog from "../dialog.vue"
import Vue from "vue"
//利用vue.extend创建组件对象
const DialogConstructor = Vue.extend(Dialog)
const DialogConstructor = new DialogConstructor({
	data:{
		showPopup:false,//是否显示
	}
})
//组件配置的添加与挂载
const dialogCreateFunction = (options,confirmBack,cancelBack){
	options = options || {}
	let root = document.querySelector("#root-dialog");
	if(!root.hasChildNodes()){
		DialogConstructor.id = "xxxx"
		DialogConstructor.$mount()
		//$mount() 不带参数,会把组件在内存中渲染完毕。因为没有挂载到节点上,因此显示不了组件。此时的DialogConstructor已经是一个标准的Vue组件实例,因此它的$el属性也可以被访问。
		root.appendChild(DialogConstructor.$el);
	}
	//此处可以为组件添加一些属性
	DialogConstructor.$props.title = "新创建的dialog组件"
	...
	//修改js的数据
	DialogConstructor.$data.showPopup = true
}
//导出
export default{
	install(Vue){
		Vue.prototype.$dialog = dialogCreateFunction
	}
}

step4

//在main文件中引入即可
import Dialog form "xxx.js"
Vue.use(Dialog)

大功告成!

对vue.extend不太理解的移步这里

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值