组件的二次封装

组件的二次封装

不管是多样的组件库还是项目中他人封装的组件,实际项目中往往需要二次封装。

1、完整传递原有组件的属性、事件、插槽

vue2:使用v-bind="$attrs"传递属性,v-on="$listeners"传递事件。
vue3:使用v-bind="$attrs"传递属性+事件

复制代码
以el-input为例
<el-input v-bind="$attrs">
      <!-- 透传所有具名插槽 -->
      <template v-for="(_, name) in $slots" #[name]="slotProps">
        <slot :name="name" v-bind="slotProps"></slot>
      </template>
</el-input>
2、按需改造
复制代码
//在以上基础上可自行改造,例如添加提示信息
<el-input v-bind="$attrs" >
      <!-- 透传所有具名插槽 -->
      <template v-for="(_, name) in $slots" #[name]="slotProps">
        <slot :name="name" v-bind="slotProps"></slot>
      </template>
</el-input>
<div class="input-tips">{{tips}}</div>    //添加其他固定内容
<slot></slot>                                         //添加插槽
3、暴漏组件内部属性/方法

如果需要使用到组件内部的一些属性和方法,在二次封装时需要对外暴漏处理

复制代码
<script setup lang="ts">
import { ref } from 'vue'
import { ElInput } from 'element-plus'
const inputRef = ref<InstanceType<typeof ElInput>>()
//vue3中通过defineExpose对外暴漏属性/方法
//vue2中通过$refs获取组件的原生方法【$refs.封装组件Ref.$refs.原生组件Ref.方法()】
defineExpose({
  focus: () => {
    inputRef.value?.focus()
  },
})
</script>
//组件添加ref标识
<el-input  ref="inputRef"></el-input>
相关推荐
小灰灰搞电子8 分钟前
Rust+Slint 实现温度计源码分享
前端·rust·slint
计算机魔术师16 分钟前
面壁智能 OpenBMB 推出 MathForm,面向 Lean 4 数学自动形式化的开源框架、数据集与模型
前端
NeilCarmack40 分钟前
Deepseek-harness增加桌面版端序列:第 2 讲 · spawn Electron:当前进程如何“交棒“
前端·javascript·electron
上海魁鲸科技有限公司1 小时前
APS高级排产系统到底有什么用?一文讲清功能、选型与落地建议
前端·microsoft·excel
陈随易1 小时前
Bun v1.4 更新总结:把浏览器、图片、定时任务和工程工具都装进一个运行时
前端·后端·程序员
东风破_3 小时前
TypeScript 高级类型进阶:keyof、Exclude、Record 与类型组合思想
前端·后端·typescript
DS随心转插件3 小时前
Grok生成的html怎么导出——AI导出鸭:大模型结构化输出的“最后一公里”工程化解构
前端·人工智能·ai·html·豆包·deepseek·ai导出鸭
এ慕ོ冬℘゜3 小时前
使用 jQuery 动态渲染表格与状态切换
前端·javascript·jquery
人间凡尔赛4 小时前
2026 前端必修:4 个让 CSS 脱胎换骨的现代新特性(附实战代码)
前端·css
用户2181697049304 小时前
Flutter (二十) 轮播图
前端