如何模仿element ui 写一个弹窗组件

在element ui vue2版本的组件库中,发现了一个可以通过this.$notify直接调用的提示组件,不需要import引入就可以,在多方资料查找和阅读下终于理清了他的实现方式

实现步骤

1、通过Vue.extend()构造一个组件实例
2、挂载渲染 Vue.extend()的实例
3、抛出 Vue.extend() 实例
4、在main.js文件中导入,挂载在vue的prototype上
5、在页面中引用

main.js
import Vue from 'vue'
import ElementUI from 'element-ui';
import 'element-ui/lib/theme-chalk/index.css';
import App from './App.vue'
import notice from './components/notice/index.js'

Vue.use(ElementUI);

Vue.config.productionTip = false
Vue.prototype.bus = new Vue()
Vue.prototype.$notice = notice;//挂载组件
new Vue({
  render: h => h(App),
}).$mount('#app')

组件目录的结构
组件目录的结构

组件的写法
import Vue from 'vue'
import notice from './notice.vue'
const constructor = Vue.extend(notice); //相当于一个构造器
export default function showNotice(option){
	
	const instance = new constructor({
		data:{
			...option //调用是传递过来的值会覆盖合并组件里的data
		}
	})
	instance.$mount();//渲染组件
	document.body.append(instance.$el);// 挂载到body上 ,$el是组件template的标签
	return instance
}
<template>
	<div class="tipBox" v-if="show">
		<h4>{{title}}</h4>
		<div>{{message}}</div>
		<i class="el-icon-close icon" @click="close"></i>
	</div>
</template>

<script>
	export default{
		data() {
			return{
				title:'',
				message:'',
				duration:3000,
				show:true
			}
		},
		created() {
			setTimeout(()=>{
				this.close();
			},this.duration)
		},
		methods:{
			close(){
				this.show = false
			}
		}
	}
</script>

<style>
	.tipBox{
		width: 40%;
		height:140px;
		position: fixed;
		top: 50%;
		left:50%;
		transform: translateX(-50%) translateY(-50%);
		border:1px solid #ccc;
		border-radius: 10px;
		box-sizing: border-box;
		padding: 20px;
		box-shadow: 2px 0px 8px #eee;
	}
	.tipBox .icon{
		position: absolute;
		right: 20px;
		top: 20px;
	}
</style>
使用方法
openCoustom(){
	this.$notice({
		title:"12023",
		message:"学习的咋么样?",
		duration:500
	})
}
  • 6
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值