组件的二次封装

组件的二次封装

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

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>
相关推荐
朱涛的自习室44 分钟前
212 个需求、22 万行代码:Agent 接管开源项目的 19 天
android·前端·人工智能
aZhe的全栈知识分享1 小时前
AI 还原 Figma 效果总达不到预期?先别急着让它写代码
前端·后端·面试
review445431 小时前
Codex Hooks 入门实战:生命周期事件、matcher 与5分钟跑通一个钩子
前端·agent·vibecoding
函数小陈1 小时前
阿里云部署DSH与RAM完成运维
前端·后端
用户499335025071 小时前
JS 作用域劫持的死穴:动态 this 穿透,以及 AST 怎么救
前端
IT_陈寒2 小时前
React的setState真是个演员,你以为它同步其实在装睡
前端·人工智能·后端
孟健3 小时前
Claude Code 同需求写两版对比:装不装 frontend-design 差多远?
前端·ai编程·claude
OpsEye4 小时前
大模型 Token 计量不准,是什么原因,怎么解决??
javascript·ai编程
梦de天空一米16885 小时前
【一个重复id让游戏卡在62%,聊聊配置表检查】
前端
ryn483985 小时前
01 一个功能模块,怎么分层才不乱
前端·ai编程·claude