vue之自定义组件的 v-model 的详解及实践
xsobi 2025-01-01 23:16 21 浏览
Vue的自定义组件的 v-model的这块将的不是很清楚,今天我们就一起来捋一下看看自定义组件中的v-model是什么。
先看官方文档中对v-model的解释
v-model 指令在表单 <input>、<textarea> 及 <select> 元素上创建双向数据绑定。它会根据控件类型自动选取正确的方法来更新元素。尽管有些神奇,但 v-model 本质上不过是语法糖。它负责监听用户的输入事件以更新数据,并对一些极端场景进行一些特殊处理
那么v-model的语法糖是什么呢?
第一行的代码其实只是第二行的语法糖。<input v-model="todosth" />
<input :value="todosth" @input="todosth = $event.target.value" />
input 框拥有一个 oninput 事件,一旦输入框内容发生变化,就会触发 oninput ,把最新的value传递给 todosth。面试中经常会有人问这个问题。
$event.target.value 就是当前元素的值。
了解了V-model 我们再看下他在自定义组件上的使用,先看下官网的说完为看下它解决了哪些问题:
一个组件上的 v-model 默认会利用名为 value 的 prop 和名为 input 的事件,但是像单选框、复选框等类型的输入控件可能会将 value 特性用于不同的目的。model 选项可以用来避免这样的冲突
给组件添加 v-model 属性时,默认会把 value 作为组件的属性,然后把 'input' 值作为给组件绑定事件时的事件名,那么如果我们需要是checked 属性的时候,当点击这个单选框的时候只会触发 onchange 事件不会触发 oninput 事件。
那么自定义组件的 v-model可以通过自定义 prop/event来完成我们需要的结果,直接上代码:
父组件
<!-- parent -->
<template>
<div class="parent">
<p>父组件将传递给子组件的数据是: <input type="text" v-model="giveChildData"/></p>
<Child v-model="giveChildData"></Child>
</div>
</template>
<script>
import Child from './Child.vue';
export default {
data() {
return {
todosth:0,
giveChildData: '儿子,爸要把家产传给你啊!'
};
},
components: {
Child
}
}
</script>
子组件:
<!-- child -->
<template>
<div class="child">
<p>子组件将通过$emit调用父组件的函数并修改数据:{{ give }}</p>
<span @mousemove="returnBackFn">答复</span>
</div>
</template>
<script>
export default {
props: {
give: {
type: String,
default: '0'
}
},
model: {
prop: 'give',
event: 'returnBack'
},
methods: {
returnBackFn() {
this.$emit('returnBack', '啥家产?有矿啊!');
}
}
};
</script>
这里的 giveChildData 的值将会传入这个名为 give 的 prop。同时当 <Child> 触发一个 returnBack 事件并附带一个新的值的时候,这个 giveChildData 的属性将会被更新。
相关推荐
- 大模型技术:详解LangGraph,从基础到高级
-
图片来自DALL-E3LangChain是构建由Lardge语言模型提供支持的应用程序的领先框架之一。借助LangChain表达语言(LCEL),定义和执行分步操作序列(也称为链)变得更加简...
- SQL知识大全三):SQL中的字符串处理和条件查询
-
点击上方蓝字关注我们今天是SQL系列的第三讲,我们会讲解条件查询,文本处理,百分比,行数限制,格式化以及子查询。条件查询IF条件查询#if的语法IF(expr1,expr2,expr3)#示例S...
- 聊聊Spring AI Alibaba的PdfTablesParser
-
序本文主要研究一下SpringAIAlibaba的PdfTablesParserPdfTablesParsercommunity/document-parsers/spring-ai-alibab...
- SpringBoot数据库管理 - 用Liquibase对数据库管理和迁移?
-
Liquibase是一个用于用于跟踪、管理和应用数据库变化的开源工具,通过日志文件(changelog)的形式记录数据库的变更(changeset),然后执行日志文件中的修改,将数据库更新或回滚(ro...
- MySQL合集-单机容器化
-
MySQL单机容器化mkdir-p/opt/mysql/{data,etc}cpmy.cnf/opt/mysql/etc#dockersearchmysqldockerpullm...
- 差异基因分析不会做?最简单的火山图做法,一秒学会
-
最近很多刚了解生信的同学问喵学姐:看了一些文献,文献里的各种图怎么看呀,完全看不懂。今天喵学姐就来给大家讲一讲我们平时做的最基础的差异分析——火山图火山图(Volcanoplot)是散点图的一种,它...
- 每分钟写入6亿条数据,携程监控系统Dashboard存储升级实践
-
一、背景概述框架Dashboard是一款携程内部历史悠久的自研监控产品,其定位是企业级Metrics监控场景,主要提供用户自定义Metrics接入,并基于此提供实时数据分析和视图展现的面板服务,提供...
- 高效开发库:C++ POCO库开发者使用指南
-
目录POCO库简介POCO库的特点POCO库的模块分类POCO库的应用场景各模块功能详解与代码示例1.POCO库简介POCO(PortableComponents)是一个开源的C++类库,旨在为开...
- Oracle中JDBC处理PreparedStatement处理Char问题浅析
-
最近碰到一个奇怪的问题,同样的Java代码,在不同的数据库执行,结果集却不同?代码片段如下:表的定义:SAMPLE_TABLE(IDINTEGER,NAMECH...
- mp4封装格式各box类型讲解及IBP帧计算
-
mp4封装格式各box类型讲解及IBP帧计算目录;总结送学习大纲零基础到实战boxftypboxmoovboxmvhdbox(MovieHeaderBox)trakbox(Track...
- 「猪译馆」ASFV在不同基质中的存活时间(一)
-
作者Author欧洲食品安全署EuropeanFoodSafetyAuthority(EFSA),AndreaGervelmeyer欧盟委员会委托欧洲食品安全署对非洲猪瘟病毒在不同基质中...
- 视频封装格式:MP4格式详解
-
1.MP4格式概述1.1简介MP4或称MPEG-4第14部分(MPEG-4Part14)是一种标准的数字多媒体容器格式。扩展名为.mp4。虽然被官方标准定义的唯一扩展名是.mp4,但第三方通...
- 音视频八股文(10)-- mp4结构
-
介绍mp4文件格式又被称为MPEG-4Part14,出自MPEG-4标准第14部分。它是一种多媒体格式容器,广泛用于包装视频和音频数据流、海报、字幕和元数据等。(顺便一提,目前流行的视频编码格式...
- 大数据ClickHouse进阶(九):ClickHouse的From和Sample子句
-
#头条创作挑战赛#ClickHouse的From和Sample子句一、From子句From子句表示从何处读取数据,支持2种形式,由于From比较简单,这里不再举例,2种使用方式如下:SELECTcl...
- 一文读懂MP4封装格式
-
简介MP4或称MPEG-4第14部分(MPEG-4Part14)是一种标准的数字多媒体容器格式。扩展名为.mp4。虽然被官方标准定义的唯一扩展名是.mp4,但第三方通常会使用各种扩展名来指示文件的...
- 一周热门
- 最近发表
- 标签列表
-
- grid 设置 (58)
- 移位运算 (48)
- not specified (45)
- 导航栏 (58)
- context xml (46)
- scroll (43)
- dedecms模版 (53)
- c 视频教程下载 (33)
- listview排序 (33)
- characterencodingfilter (33)
- getmonth (34)
- label换行 (33)
- android studio 3 0 (34)
- html转js (35)
- 索引的作用 (33)
- checkedlistbox (34)
- xmlhttp (35)
- mysql更改密码 (34)
- 权限777 (33)
- htmlposition (33)
- 学校网站模板 (34)
- textarea换行 (34)
- 轮播 (34)
- asp net三层架构 (38)
- bash (34)