我是靠谱客的博主 饱满小霸王,最近开发中收集的这篇文章主要介绍vue项目中创建全局组件,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

在项目中需要用到一个确认删除的弹窗,因为有多个地方需要用到这个提示框,不想每次用的时候都要引入一次这个弹窗组件,因此把它做成了一个全局组件;这里使用了element UI的dialog来实现的弹窗效果。
操作步骤如下:
1、在components中创建一个sysTips.vue组件

//sysTips.vue代码
<template>
	<div class="confirmDel">
		<el-dialog custom-class="systips" :title="title" top="35vh" :visible.sync="visible" :close-on-click-modal="false"
		 :before-close="handleClose">
			<span class="delcontent">{{content}}</span>
			<span slot="footer" class="dialog-footer">
				<span class="determine" @click="Determine()">{{determine}}</span>
				<span class="cancel" @click="handleClose">{{cancel}}</span>
			</span>
		</el-dialog>
	</div>
</template>

<script>
	export default {
		data() {
			return {
				visible: false,
				title: '系统提示',
				content: '', //提示内容
				iconName: 'delIcon', //图标名称 closeIcon  delIcon
				cancel: '取 消', //灰色按钮的文字
				determine: '确认删除', //红色按钮的文字
				time: 1000,
				clickDetermine: '', //确定
				clickCancel: '', //取消

			};
		},
		watch: {
			visible(newValue, oldValue) {
				if (!newValue) {
					// 当弹窗状态为隐藏时
					var confirmDels = document.getElementsByClassName('confirmDel');
					if (confirmDels.length >= 2) {
						// 如果页面中类名为confirmDel的元素个数大于等于2时,则删除第一个元素,确保页面中只有一个confirmDel元素
						let confirmdel = confirmDels[0];
						document.body.removeChild(confirmdel);
					}
				}
			}
		},
		methods: {
			close() {
				if (this.type == 1) {
					// 用于弹窗自动关闭的方法
					window.setTimeout(() => {
						this.visible = false
					}, this.time);
				}
			},
			handleClose() {
				// 点击取消按钮时触发的函数
				if (this.clickCancel) {
					this.clickCancel();
				}
				this.visible = false;//关闭弹窗
			},
			Determine() { 
				// 点击确定按钮时触发的函数
				if (this.clickDetermine) {
					this.clickDetermine();
				}
				this.visible = false;//关闭弹窗
			}
		},
	};
</script>
<style>
//样式部分就不写了
</style>

2、在utils中创建一个confirmDel.js文件,用于创建全局组件。

//confirmDel.js文件代码
import Vue from 'vue'
import confirmDel from '@/components/sysTips.vue';

//使用Vue.extend来创建全局组件
const messageBox = Vue.extend(confirmDel)
confirmDel.install = function (options) {
//使用$mount()给组件手动挂载参数
  let instance = new messageBox({
    data: options
  }).$mount()
  
  document.body.appendChild(instance.$el); //将组件插入页面中
  Vue.nextTick(() => {
		// 设置弹窗为显示状态
    instance.visible = true 
  })
}
export default confirmDel

3、在main.js中挂载该弹窗

// main.js中代码片段
import confirmDel from './utils/confirmDel.js'
Vue.prototype.$confirmDel = confirmDel.install; //确认删除弹窗

4、在任意组件中使用

// 组件中使用的代码片段
<template>
	<div>
		<el-button type="danger" plain @click = "handleClick()">删除按钮</el-button>
	</div>
</template>
<script>
  export default{
  	methods: {
		handleClick(){
			// 点击删除按钮触发的事件,到这里就能弹窗提示框了
			// 如title之类的参数,不传的话使用默认值
			this.$confirmDel({
				title:'提示框',
				content:'确认删除该条数据吗?',
				determine:'确认',
				cancel:'取消',
				clickDetermine:()=>{
					// 点击确认按钮触发的函数,在这里可以上axios请求调用接口删除数据库中数据
					console.log("删除成功了!")
				},
				clickCancel:()=>{
					// 点击取消按钮时触发的函数,如果没有需要触发的函数可以不用写这方法
					console.log("取消了啦!")
				}
			})
		},
	}
  }
  </script>

最后

以上就是饱满小霸王为你收集整理的vue项目中创建全局组件的全部内容,希望文章能够帮你解决vue项目中创建全局组件所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(66)

评论列表共有 0 条评论

立即
投稿
返回
顶部