vue高级组件封装 element组件二次封装

vue高级组件封装 element组件二次封装

相关解读

  1. 使用defineOptions定义组件名称
  2. 使用useSlots获取插槽 获取父组件传递过来的dialog组件的插槽 通过循环直接通过动态插槽插入el-dialog组件中
  3. 使用defineExpose暴露组件方法 父组件可通过ref直接调用
  4. 使用v-bind="$attrs"绑定父组件传递的属性
  5. 使用v-bind="slotProps"绑定插槽属性
  6. 经过这些处理可直接在使用这个组件的地方 透传el-dialog组件的属性和插槽 同时能接受el-dialog抛出的方法

组件封装

js 复制代码
<template>
  <el-dialog
    v-model="dialogVisible"
    v-bind="$attrs"
    append-to-body
    class="my-dialog"
  >
    <template v-for="(_,name) in slots" #[name]="slotProps">
      <slot :name="name" v-bind="slotProps"></slot>
    </template>
  </el-dialog>
</template>

<script setup lang="ts">
import { useSlots, Slots } from 'vue';
defineOptions({
  name: 'MyDialog'
})
const slots:Slots  = useSlots();
const dialogVisible = ref(false)
const init = () => {
  dialogVisible.value = true
}
defineExpose({
 init
})
</script>

<style lang="scss">
// 重新定义弹窗样式
.my-dialog{

}
</style>

组件使用

js 复制代码
<template>
  <MyDialog ref="myDialog" width="500px" top="20vh" draggable @closed="handleClosed">
  </MyDialog>
</template>
<script setup lang="ts">
  const myDialog = ref()
  const handleClosed = () => {
    console.log('closed')
  }
  onMounted(() => {
    myDialog.value?.init()
  })
</script>
相关推荐
开开心心就好1 小时前
批量提取PDF中的图片,直接导出原图
前端·javascript·支持向量机·智能手机·pdf·html·启发式算法
默_笙5 小时前
🏛 给 AI 配一间办公室:Harness Engineering 六大模块与它的实现
前端·javascript
linux_cfan7 小时前
videojs v10 源代码系列解读:14 · 谓词守卫:在运行时安全地调用能力
前端·javascript·音视频
+VX:Fegn08958 小时前
计算机毕业设计|基于springboot + vue旅游管理系统(源码+数据库+文档)
java·开发语言·vue.js·spring boot·课程设计
雪芽蓝域zzs8 小时前
第 7 章:双 Y 轴组合图(柱状 + 折线,看板高频场景)
vue.js·echars
一 乐9 小时前
二手交易平台|基于springboot + vue二手交易平台(源码+数据库+文档)
java·数据库·vue.js·spring boot·小程序
天若有情6739 小时前
【纯前端小工具】公历生日转农历,批量查询每年农历生日对应的公历日期(GitHub Pages在线直接用)
前端·javascript·github pages·农历转换·lunisolar·网页小工具
vx-程序开发10 小时前
【计算机毕设】django校园跑腿服务系统83141
java·数据库·vue.js·spring boot·spring·elasticsearch·django
林语琛10 小时前
我写的 switch…break 被 Babel 偷偷吞了
前端·javascript·babel
liuchangng10 小时前
Jev 模型研究:从生成式大模型到决策式模型——System One、RLCD 校准与采用边界
java·javascript·人工智能·python·深度学习