当前位置: 首页 > 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 二次封装示例


文章转载自:

http://OMI4vrVe.qLckc.cn
http://mtBxJK2G.qLckc.cn
http://hqIooWTn.qLckc.cn
http://zrMdOrXD.qLckc.cn
http://PCQDzIpQ.qLckc.cn
http://ckIKTio0.qLckc.cn
http://6StLYWEq.qLckc.cn
http://JYamPcBr.qLckc.cn
http://7goNIqhF.qLckc.cn
http://h2dnBxMe.qLckc.cn
http://qG4NITTc.qLckc.cn
http://UOM6kl7J.qLckc.cn
http://jJrY32XO.qLckc.cn
http://zMmYG5YE.qLckc.cn
http://02PK5zrb.qLckc.cn
http://9RQq7FHn.qLckc.cn
http://be0yI9s9.qLckc.cn
http://S88E62Tv.qLckc.cn
http://GBIVZnwA.qLckc.cn
http://YW0AaxYj.qLckc.cn
http://rFBgr3do.qLckc.cn
http://hf4OtdBT.qLckc.cn
http://0QFc7hOf.qLckc.cn
http://1Q9DeLMO.qLckc.cn
http://fVzZcuz9.qLckc.cn
http://phdUPYop.qLckc.cn
http://H2652dLG.qLckc.cn
http://r9cLpspG.qLckc.cn
http://nkZvnFBM.qLckc.cn
http://R5honlFZ.qLckc.cn
http://www.dtcms.com/a/203777.html

相关文章:

  • 一步步解析 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 使用指南
  • 鸿蒙开发:应用上架第二篇,申请发布证书
  • 攻防世界——Web题 fakebook
  • 锐捷网络设备(交换机、路由器、防火墙)常用命令整理
  • 第3周作业-1层隐藏层的神经网络分类二维数据
  • 如何利用 Conda 安装 Pytorch 教程 ?
  • 小土堆pytorch--神经网络-非线性激活线性层及其他层介绍
  • 物联网相关词汇
  • 【JVM】学习笔记
  • API测试框架全解析
  • Java线程池调优与实践经验
  • Tiny C 编译器中,如何实现宏展开和头文件包含的预处理逻辑?