vue.js

关注公众号 jb51net

关闭
首页 > 网络编程 > JavaScript > javascript类库 > vue.js > vue3 ts elementui-plus弹框

vue3+ts+elementui-plus二次封装弹框实战教程

作者:suoh's Blog

这篇文章主要介绍了vue3+ts+elementui-plus二次封装弹框实战教程,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

vue3+ts+elementui-plus二次封装弹框

一、弹框组件BaseDialog

<template>
      <div class='main'>
            <el-dialog v-model="visible" :title="title" :width="dialogWidth" :before-close="handleClose">
                  <!-- 内容插槽 -->
                  <slot></slot>
                  <template #footer>
                        <span class="dialog-footer">
                              <el-button v-if="showCancelButton" @click="handleClose">取消</el-button>
                              <el-button v-if="showConfirmButton" type="primary" @click="handleConfirm">
                                    确认
                              </el-button>
                        </span>
                  </template>
            </el-dialog>
      </div>
</template>
<script lang='ts' setup>
import { ElMessageBox } from 'element-plus'
import { ref, reactive, getCurrentInstance, onMounted, defineExpose, defineEmits } from 'vue'
/**
 * 传入的props变量
*/
const props = defineProps({
      title: {
            type: String,
            default: '提示',
      },
      dialogWidth: {
            type: String,
            default: '40%',
      },
      showCancelButton: {
            type: Boolean,
            default: true,
      },
      showConfirmButton: {
            type: Boolean,
            default: true,
      },
})
/**
 * 发射给父组件的方法 
 * 用于子组件给父组件传值或调用父组件方法
*/
const emits = defineEmits(['submit', 'close'])
const visible = ref(false)
// 关闭弹框
const handleClose = () => {
      emits('close')
}
// 打开弹框
const handleOpen = () => {
      visible.value = true
}
// 确认事件
const handleConfirm = () => {
      emits('submit')
}
/**
 * 暴露给父组件的方法
 * 用于父组件调用子组件方法或获取子组件属性值
*/
defineExpose({ handleOpen, handleClose, visible })
onMounted(() => {
})
</script>
<style scoped lang='scss'>
</style>

二、在index.vue中使用

<el-button @click="showDialog">点击出现弹框</el-button>
		<BaseDialog ref="baseDialog" @submit="handleSubmit" @close="handleClose">
			<div>
				<el-input placeholder="Please input" />
			</div>
		</BaseDialog>
<script lang='ts' setup>
import BaseDialog from '@/components/BaseDialog/index.vue'
import { ref, reactive, getCurrentInstance, onMounted } from 'vue'
onMounted(() => {
})
// 获取子组件的ref
let baseDialog = ref()
// 点击出现弹框
const showDialog = () => {
	// 调用子组件方法,打开弹框
	baseDialog.value.handleOpen()
}
// 弹框确认事件
const handleSubmit = () => {
	console.log('我是父组件中的确认事件')
}
// 弹框取消事件 
const handleClose = () => {
	baseDialog.value.visible = false
}
</script>

三、效果

 创建vue3+ts+element-plus项目

一、创建vue3项目

1.新建vue3TsElement文件夹

该文件夹中打开命令行窗口,运行创建vue3项目的命令

npm init vue@latest

2.打开创建好的vue3_TS_element文件夹

关掉之前的命令行窗口,在该文件夹中再次打开命令行窗口下载依赖文件

npm install

3.说明

注意创建项目命令行窗口与安装依赖命令行窗口之间的切换

二、安装element-plus组件库

安装命令

npm install element-plus --save

完整引入

在main.ts引入,就可以使用了

import ElementPlus from 'element-plus'
import 'element-plus/dist/index.css'
app.use(ElementPlus)

按需引入

(1)首先要安装element-plus

npm install element-plus --save

(2)然后你需要安装unplugin-vue-components 和 unplugin-auto-import这两款插件

npm install -D unplugin-vue-components unplugin-auto-import

(3)然后把下列代码插入到你的 Vite 或 Webpack 的配置文件中

import { fileURLToPath, URL } from 'node:url'
import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
//按需引入element
import AutoImport from 'unplugin-auto-import/vite'
import Components from 'unplugin-vue-components/vite'
import { ElementPlusResolver } from 'unplugin-vue-components/resolvers'
// https://vitejs.dev/config/
export default defineConfig({
    plugins: [
        AutoImport({//按需引入element
            resolvers: [ElementPlusResolver()],
        }),
        Components({//按需引入element
            resolvers: [ElementPlusResolver()],
        }),
        vue(),
    ],
    resolve: {
        alias: {
            '@': fileURLToPath(new URL('./src', import.meta.url))
        }
    }
})

到此这篇关于vue3+ts+elementui-plus二次封装弹框的文章就介绍到这了,更多相关vue3 ts elementui-plus弹框内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文