vue3+ts+element-plus实际开发之统一调用弹窗封装的详细过程

 更新时间:2024年03月12日 11:21:14   作者:大白菜1号  
这篇文章主要介绍了vue3+ts+element-plus实际开发之统一调用弹窗封装的详细过程,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧

插槽

1. 官网介绍

官网文档地址

先理解 插槽、具名插槽、 作用域插槽、动态插槽名、具名作用域插槽属性和使用方法

2. 统一调用弹窗封装dome实战

- 使用场景:

大屏看板中,小模块查看详情信息功能

- 对el-dialog进行数据动态设置

新建一个one-dialog.vue文件,并修改成自己需要的组件。

<template>
  <el-dialog
    v-model="dialogTableVisible"
    :title="title"
    :width="width"
    :top="top"
    :custom-class="customClass"
    :style="{ maxWidth: width, minWidth: width }"
    destroy-on-close
    align-center
    append-to-body
  >
    <slot name="dialog" />
  </el-dialog>
  <!-- 定义一个 @click 事件监听器来绑定点击事件到组件的 showDialog 方法上。 -->
  <div style="cursor: pointer" @click="showDialog">
    <!-- slot可以可以包裹在父组件要设置点击事件的标签外层 ,来实现父组件内调起弹窗-->
    <slot />
  </div>
</template>
<script setup lang="ts">
import { ref } from "vue";
defineProps({
  title: String,
  width: [String, Number],
  customClass: String,
  top: [String, Number],
});
const dialogTableVisible = ref(false);
const showDialog = () => {
  dialogTableVisible.value = true;
};
</script>
<style scoped lang="scss">
</style>

- 新建一个ts文件用于统一存放组件,类似下边格式

export { default as Dialogone } from './one.vue';
export { default as Dialogtwo} from './two.vue';
export { default as DialogFancyButton} from './fancyButton.vue';
export { default as TableList} from '@/views/elementPlus/tableList.vue';

- 封装一个通用弹窗

新建组件one.vue,并且在one.vue里边使用封装好的one-dialog.vue组件

<template>
  <!-- 弹窗 -->
  <Dialogone title="表格详情" width="700px" :dialogTableVisible="true">
    <!-- 使用插槽向固定位置输出内容 #是v-slot简写,这个SleFone要与父组件使用时候<template #SleFone>一致-->
    <slot name="SleFone"> </slot>
    <template #dialog>
      <TableList v-if="type==='1'"></TableList>
      <CarouselOne v-if="type==='2'"></CarouselOne>
    </template>
  </Dialogone>
</template>
<script setup lang="ts">
import { Dialogone } from "../../../components/index";
//这里我随便拿了两个页面做组件使用,
import { TableList } from "../../../components/index";
import { CarouselOne } from "../../../components/index";
defineProps({
  type: String,
});
</script>
<style scoped lang="scss">
</style>

使用示例
我直接在表格详情使用的,点击详情掉用组件

在这里插入图片描述

在这里插入图片描述

3. 多个页面使用时候统一引用

新建一个GlobalComponents.ts文件

import { App } from 'vue';
import {SleFone} from './index';
// 创建一个 install 函数,接收 Vue 应用实例作为参数
const install = (app: App) => {
    // 在 Vue 应用实例中注册 SleFone 组件
    app.component('SleFone', SleFone);
    // 在这里可以注册其他全局组件
    // app.component('AnotherComponent', AnotherComponent);
  };
  // 导出 install 函数
  export default { install };

在main.ts中统一引入

//自定义组件
import GlobalComponents from './components/GlobalComponents';
const app = createApp(App)
app.use(GlobalComponents);
app.mount('#app');

页面中不需要每个引用,可以直接使用

 <SleFone type="1">
          <template #SleFone>
          //一下内容可以自定义
            <el-button
              link
              type="primary"
              size="small"
              @click="detailsClick(scope.row)"
            >
              点击唤起弹窗
            </el-button>
            </template>
            </SleFone>

如果出现套盒子情况,2种处理方式

第一种处理方式

如果我们想在父组件没有提供任何插槽内容时在 内渲染“Submit”,只需要将“Submit”写在 标签之间来作为默认内容:

 <button type="submit">
  <slot name="SleFone2">
    Submit <!-- 默认内容 -->
  </slot>
</button>

但如果我们提供了插槽内容:=
那么被显式提供的内容会取代默认内容:

      <template #SleFone2>
          <span>新内容</span> 
        </template>

根据上边插槽特性,反向使用

2. 第二种处理方式: 更换唤起弹窗的方式,根据实际情况也已使用全局变量控制

到此这篇关于vue3+ts+element-plus实际开发之统一调用弹窗封装的文章就介绍到这了,更多相关vue3 ts element-plus弹窗封装内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 详解使用vue-cli脚手架初始化Vue项目下的项目结构

    详解使用vue-cli脚手架初始化Vue项目下的项目结构

    这篇文章主要介绍了详解使用vue-cli脚手架初始化Vue项目下的项目结构,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-03-03
  • Vue3中使用ref与reactive创建响应式数据的示例代码

    Vue3中使用ref与reactive创建响应式数据的示例代码

    这篇文章主要介绍了Vue3中使用ref与reactive创建响应式数据的方法,文中通过代码示例讲解的非常详细,对大家的学习或工作有一定的帮助,需要的朋友可以参考下
    2024-08-08
  • vue中实现打印功能的几种方法示例

    vue中实现打印功能的几种方法示例

    这篇文章主要给大家介绍了关于vue中实现打印功能的几种方法,打印功能在实际开发中非常常见,通常我们需要将网页中的某一部分或整个网页打印出来,需要的朋友可以参考下
    2023-09-09
  • vue中如何获取当前路由name

    vue中如何获取当前路由name

    这篇文章主要介绍了vue中如何获取当前路由name,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-10-10
  • 解决前端调用后端接口返回200但数据返回的是html标签

    解决前端调用后端接口返回200但数据返回的是html标签

    这篇文章主要给大家介绍了关于如何解决前端调用后端接口返回200但数据返回的是html标签的相关资料,文中通过图文将解决的过程介绍的非常详细,对同样遇到这个问题的朋友具有一定的参考解决价值,需要的朋友可以参考下
    2024-05-05
  • 从组件封装看Vue的作用域插槽的实现

    从组件封装看Vue的作用域插槽的实现

    这篇文章主要介绍了从组件封装看Vue的作用域插槽的实现,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2019-02-02
  • 浅析Vue项目中使用keep-Alive步骤

    浅析Vue项目中使用keep-Alive步骤

    这篇文章简单给大家介绍了Vue项目中使用keep-Alive步骤,在vue2.1.0之前,实现方式也给大家作了简单介绍,感兴趣的朋友跟随脚本之家小编一起看看吧
    2018-07-07
  • element-ui 弹窗组件封装的步骤

    element-ui 弹窗组件封装的步骤

    这篇文章主要介绍了element-ui 弹窗组件封装的步骤,帮助大家更好的理解和使用vue框架,感兴趣的朋友可以了解下
    2021-01-01
  • vue函数input输入值请求时延迟1.5秒请求问题

    vue函数input输入值请求时延迟1.5秒请求问题

    这篇文章主要介绍了vue函数input输入值请求时延迟1.5秒请求问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-04-04
  • 修改Vue打包后的默认文件名操作

    修改Vue打包后的默认文件名操作

    这篇文章主要介绍了修改Vue打包后的默认文件名操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-08-08

最新评论