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

Vue 封装Input组件 双向通信

子组件

<template><div class="box"><div class="box-left"><input @blur="handleBlur"  v-model="localInput" class="box-left-input"> </div><div class="box-right"><p style="font-size: 10px;margin-left: 10px">{{ unit }}</p></div></div>
</template><script>module.exports = {data() {return {//初始进行一个赋值localInput: this.defaultInputValue}},props: {//父将数据传过来defaultInputValue: {type: [String, Number],default: 0,},unit: {type: String,default: '℃',},//父传过来的失焦方法onBlur: {type: Function,default: null}},watch: {//监听输入框的变化 输入框一变化就将新值传给父localInput(val) {this.$emit('update:defaultInputValue', val)},//当父修改了defaultInputValue这个数据 同步输入框的内容defaultInputValue(val) {this.localInput = val}},methods:{handleBlur(event) {// 如果父组件传入了 onBlur 方法,则调用if (this.onBlur && typeof this.onBlur === 'function') {this.onBlur(event.target.value, event);}// 触发默认的 blur 事件this.$emit('blur', event.target.value, event);}}
};
</script>

父组件调用

<h-input 
:default-input.sync="waterPressureSet" 
@blur="handlePressureChange" :unit="'MPa'"></h-input><h-input :default-input-value.sync="waterPressureSet" @blur="handlePressureChange" :unit="'MPa'"></h-input>data(){return{waterPressureSet:0,}
},
methods:{handlePressureChange(val){//这里的val返回的当输入框失去焦点的时候的数据console.log(val)}
}
1. 没有 .sync 时(单向数据流):

通常,Vue 遵循单向数据流:父组件通过 prop 向子组件传递数据,子组件通过 事件 向父组件通知变化。

2. 使用 .sync 时(语法糖):

.sync 是一个语法糖,它自动帮你完成了上面那套“接收prop + 监听事件”的模板代码。

<h-input :default-input-value.sync="waterPressureSet" :unit="'MPa'"></h-input>

等价于:

<h-input :default-input-value="waterPressureSet" @update:defaultInputValue="waterPressureSet = $event":unit="'MPa'">
</h-input>
3. 子组件的要求:

为了让 .sync 正常工作,子组件 必须 在想要更新属性值时触发一个特定格式的事件:

  • 事件名必须为update:${propName}

  • 其中 propName 是你用 .sync 绑定的属性名(这里是 default-input-value,在JS中会被转换为驼峰命名 defaultInputValue

export default {props: ['defaultInputValue', 'unit'],methods: {onInputChange(newValue) {// 当输入值改变时,触发事件来更新父组件的值this.$emit('update:defaultInputValue', newValue);}}
}


文章转载自:

http://OtaKZVDN.nppmL.cn
http://jmDpF3Vu.nppmL.cn
http://4fKY4qSv.nppmL.cn
http://mwtJrc5V.nppmL.cn
http://LDP7DbA3.nppmL.cn
http://Eno4xjZb.nppmL.cn
http://HnxNnfHK.nppmL.cn
http://MXw2Il2m.nppmL.cn
http://CYU5iPyi.nppmL.cn
http://D8BdoWGf.nppmL.cn
http://x6WZHzd7.nppmL.cn
http://KQKdtjOq.nppmL.cn
http://uHKxoN9O.nppmL.cn
http://R7o1rQQN.nppmL.cn
http://xs5WuF87.nppmL.cn
http://xTFrTj5d.nppmL.cn
http://uTmQfpGM.nppmL.cn
http://7QfV9lQO.nppmL.cn
http://Yi4WMaVH.nppmL.cn
http://YLBzKNZJ.nppmL.cn
http://z9WtqMrh.nppmL.cn
http://QQZy7CZL.nppmL.cn
http://rsw8ybjL.nppmL.cn
http://H2x33XCx.nppmL.cn
http://aNYL2Qxy.nppmL.cn
http://g6qEeEBU.nppmL.cn
http://4TV14Ef0.nppmL.cn
http://FtY6MfGW.nppmL.cn
http://4uixRO5c.nppmL.cn
http://RbiHQWXY.nppmL.cn
http://www.dtcms.com/a/378595.html

相关文章:

  • 【混合开发】进阶到【大前端++】
  • ZooKeeper Java客户端与分布式应用实战
  • 【复习】计网每日一题---传输层无连接不可靠服务
  • 2025年秋招答疑:AI面试如何破解在线作弊难题?
  • KafKa01:在Windows系统上安装Kafka
  • 【Big Data】Amazon S3 专为从任何位置检索任意数量的数据而构建的对象存储
  • C++:模版进阶
  • 【Canvas与旗帜】圆角红面白边蓝底梅花五星旗
  • 不同局域网远程桌面连接:设置让外网电脑直接windows自带远程桌面访问内网计算机,简单3步实现通用详细教程
  • set 认识及使用
  • 如何打造“高效、安全、精准、可持续”的智能化实验室?
  • 究竟什么时候用shared_ptr,什么时候用unique_ptr?
  • 前端抽象化,打破框架枷锁:react现代化项目中的思想体现
  • 基于开源AI智能名片、链动2+1模式与S2B2C商城小程序的流量运营与个人IP构建研究
  • gstreamer:创建组件、管道和总线,实现简单的播放器(Makefile,代码测试通过)
  • Kibana 双栈网络(Dual-Stack)支持能力评估
  • go 日志的分装和使用 Zap + lumberjack
  • 河北智算中心绿色能源占比多少?
  • 在能源互联网时代天硕工业级SSD固态硬盘为何更受青睐?
  • 关于rust的crates.io
  • 使用Rust实现服务配置/注册中心
  • C++ 类与对象(下):从构造函数到编译器优化深度解析
  • DNS 域名解析
  • EasyDSS重装系统后启动失败?解决RTMP推流平台EasyDss服务启动失败的详细步骤
  • 自动驾驶中的传感器技术45——Radar(6)
  • 第四章 Elasticsearch索引管理与查询优化
  • 拆分了解HashMap的数据结构
  • Sqlite“无法加载 DLL“e_sqlite3”: 找不到指定的模块”解决方法
  • 项目 PPT 卡壳?模型效果 + 训练数据展示模块直接填 ,451ppt.vip预制PPT也香
  • react-native项目通过华为OBS预签名url实现前端直传