组件的二次封装

组件的二次封装

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

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>
相关推荐
kyriewen11 小时前
微软用Go重写TypeScript编译器,速度提升10倍,网友:这是“背叛”还是“救赎”?
前端·typescript·ecmascript 6
Ceelog11 小时前
久坐党自救指南:屏幕前 8 小时,身体到底在经历什么
前端·后端
西陵11 小时前
Agent 为什么会陷入 Doom Loop?OpenClaw 的破解之道
前端·人工智能·ai编程
Hyyy12 小时前
普通前端续命周报——第2周
前端
swipe12 小时前
DeepAgents 实战:用多 Agent 架构搭一个深度调研助手
javascript·面试·llm
wuxinyan12312 小时前
工业级大模型学习之路030:Streamlit 企业级智能体前端工作台
前端·学习·streamlit·智能体
修己xj12 小时前
告别无效刷屏!TrendRadar:最快30秒部署的开源热点助手,让你只看真正关心的新闻
前端
anOnion13 小时前
构建无障碍组件之Slider Pattern
前端·html·交互设计
云水一下13 小时前
JavaScript 从零基础到精通系列:前世今生与编程启蒙
前端·javascript
月亮邮递员61613 小时前
Markdown语法总结
开发语言·前端·javascript