当前位置: 首页 > news >正文

关于Vue自定义组件封装的属性/事件/插槽的透传问题

// parent.vue
<Myinputv-model="keyWords"placeholder="请输入内容"size="small"@input="input"@change="change"width="320"
><template #prepend><el-select v-model="select" placeholder="请选择" style="width: 115px"><el-option label="Restaurant" value="1" /><el-option label="Order No." value="2" /><el-option label="Tel" value="3" /></el-select></template><template #append><el-button @click="handleQuery">查询</el-button></template>
</Myinput>// child.vue<el-inputv-bind="$attrs"class="e-input":style="inputStyle"v-on="$listeners"@input="$emit('input', $event)"@change="$emit('change', $event)"><template v-for="(_, slotName) in $slots" #[slotName]><slot :name="slotName"></slot></template></el-input>
内部属性: $attrs、$listeners、$slots

一、属性的透传

v-bind=“$attrs”: 只会读取子组件【props 选项】中没有申明过的属性

二、自定义事件的透传

方式一:

v-on=“$listeners”: 会将父组件所有事件监听器传递到子组件内部元素

<el-input v-bind="$attrs" class="e-input" :style="inputStyle" v-on="$listeners">
</el-input>

方式二: 直接在子组件上触发事件

<el-inputv-bind="$attrs"class="e-input":style="inputStyle"@input="$emit('input', $event)"@change="$emit('change', $event)"
>
</el-input>

方式三: 手动触发事件

export default {props: ["value"],computed: {inputValue: {get() {return this.value;},set(val) {this.$emit("input", val);},},},methods: {handleChange(e) {this.$emit("change", e.target.value);},},
};

三、插槽的透传

“$slots”: 获取所有父组件传递的插槽(默认、具名、作用域)

<template v-for="(_, slotName) in $slots" #[slotName]><slot :name="slotName"></slot>
</template>

四、获取子组件实例

// parent.vue
<Myinput ref="elInp" />mounted() {// 输入框聚焦this.$refs.elInp.setFocus();},
//child.vue<el-inputref="inputRef"v-bind="$attrs"class="e-input":style="inputStyle"v-on="$listeners"/>methods: {setFocus() {this.$refs.inputRef.focus();},
},

el-input 二次封装示例

相关文章:

  • 一步步解析 HTTPS
  • 物联网之使用Vertx实现UDP最佳实践【响应式】
  • 【react18】在styled-components中引入图片报错
  • React深度解析:Hooks体系与Redux Toolkit现代状态管理实践
  • Spring Boot集成Spring AI与Milvus实现智能问答系统
  • 广州卓远VR受邀参加2025智能体育典型案例调研活动,并入驻国体华为运动健康联合实验室!
  • 【C/C++】探索单例模式:线程安全与性能优化
  • SQL数据处理流程
  • 微软正式发布 SQL Server 2025 公开预览版,深度集成AI功能
  • PostgreSQL日常维护
  • Flink SQL 计算实时指标同比的实现方法
  • 云原生安全之PaaS:从基础到实践的技术指南
  • 零基础教程:用 Docker + pgloader 将 MySQL 数据库迁移到 PostgreSQL
  • UE5.6新版本—— 动画光照系统重点更新
  • docker 启动一个python环境的项目
  • 详解鸿蒙仓颉开发语言中的日志打印问题
  • linux查看本机服务器的外网IP命令
  • 系分论文《论软件系统安全分析和应用》
  • Web Workers 使用指南
  • 鸿蒙开发:应用上架第二篇,申请发布证书
  • 医院网站建设 费用/长尾关键词在线查询
  • 微信分享网站短链接怎么做/最新引流推广方法
  • 东软 网站群平台建设/推广普通话活动方案
  • 网站怎么做图片动态图片不显示/优化大师网页版
  • 做家政的在哪些网站推广/如何建立自己的网站?
  • 做网站放太多视频/站外推广方式有哪些