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>
相关推荐
知识分享小能手17 小时前
jQuery 入门学习教程,从入门到精通, jQuery在HTML5中的应用(16)
前端·javascript·学习·ui·jquery·html5·1024程序员节
七号练习生.c17 小时前
JavaScript基础入门
开发语言·javascript·ecmascript
一 乐17 小时前
高校教务|教务管理|基于springboot+vue的高校教务管理系统(源码+数据库+文档)
java·数据库·vue.js·spring boot·后端·教务管理
zhousenshan17 小时前
ES6 import语法
vue.js
码界筑梦坊17 小时前
243-基于Django与VUE的笔记本电脑数据可视化分析系统
vue.js·python·信息可视化·数据分析·django·毕业设计·echarts
baozj17 小时前
🚀 手动改 500 个文件?不存在的!我用 AST 撸了个 Vue 国际化神器
前端·javascript·vue.js
molly cheung18 小时前
FetchAPI 请求流式数据 基本用法
javascript·fetch·请求取消·流式·流式数据·流式请求取消
Mintopia19 小时前
🧠 量子计算对AIGC的潜在影响:Web技术的未来可能性
前端·javascript·aigc
忧郁的蛋~19 小时前
.NET异步编程中内存泄漏的终极解决方案
开发语言·前端·javascript·.net
水月wwww19 小时前
vue学习之组件与标签
前端·javascript·vue.js·学习·vue