百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 文章教程 > 正文

vue之自定义组件的 v-model 的详解及实践

xsobi 2025-01-01 23:16 1 浏览


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 的属性将会被更新。


相关推荐

C++中的多态(动态多态)究竟是如何实现

为了叙述简便,在本文中,将动态多态性一律简化为多态性。在前面的文章中,我们已经简要介绍了C++的多态性,也介绍了C++的虚函数表,下面,我们来看看C++是如何利用虚函数机制来实现多态性的。(题外话:实...

C++面向对象开发的四大特性:封装、抽象、继承、多态

1、封装封装,即隐藏对象的属性和实现细节,仅对外公开接口,控制程序对类属性的读取和修改。对于类的内部,成员函数可以自由修改成员变量,进行更精确的控制;对于类的外部,良好的封装能够减少耦合,同时隐藏实现...

C#知识|继承与多态

哈喽,你好啊,我是雷工01ProtectedProtected关键字表示这个属性只能给“子类”使用,即只能在子类内部使用,不能通过子类对象去使用;02父类定义父类...

朝文分享(54):深入C++(二十一)——多态

分享兴趣,传播快乐,增长见闻,留下美好!亲爱的您,这里是LearningYard新学苑。...

C++基础语法梳理:引用、封装、继承和多态

本期是C++基础语法分享的第六节,今天给大家来分享一下:(1)引用;...

继承和多态概念及语法

继承是面向对象编程的重要概念之一,它指的是一个类可以从另一个类中继承属性和方法。...

Java的多态如何实现的?

面向对象编程语言三大特征:继承、封装、多态。虽说是三大特征,但其实从多态的角度看,继承和封装都是为了实现多态而准备的,尤其是在一些大型优秀的框架上,多态的使用随处可见,所以说多态是一个十分重要的知识点...

C++中的多态性

封装、继承、多态是C++的三大基本特性。封装可以隐藏实现细节,使得代码模块化;继承可以扩展已存在的代码模块(类);封装和继承的目的都是为了"代码重用",多态则是为了实现另一个目的:接口...

讲解一下Java 中的多态

多态(Polymorphism)属于面向对象三大特征之一,它的前提是封装形成独立体,独立体之间存在继承关系,从而产生多态机制。多态是同一个行为具有多个不同表现形式或形态的能力。重载式多态,也叫编译时多...

java编程笔记,多态的好处和弊端

测试代码:1.创建Animal.java类作为父类2.创建Cat.java类作为Animal的子类3.创建一个Dog.java类作为Animal的子类4.创建Test.java测试类代码说明:多态的好...

C/C++编程笔记:C++多态性知识详解

多态性一词意味着具有多种形式。简而言之,我们可以将多态定义为消息以多种形式显示的能力。一个真实的多态示例:一个人同时可以具有不同的特征。像男人一样,是父亲,丈夫,雇员。因此,同一个人在不同情况下会表现...

用通俗易懂的多态世界观实例:理解python类的多态

什么是python类的多态python的多态,可以为不同的类实例,或者说不同的数据处理方式,提供统一的接口。用比喻的方式理解python类的多态...

多态——制作饮品

classAbstractDrinking{public://煮水virtualvoidBoil(){cout<<"煮农夫山泉"<&...

python之多态、继承、重写篇

#-*-coding:UTF-8-*-classAnimal:defrun(self):print("动物会跑。。")defsl...

Java面向对象——多态

前两天已经相继介绍了Java面向对象的三大特性之中的封装、继承,所以今天就介绍Java面向对象的三大特性的最后一项,多态~首先讲一下什么是多态,以及多态需要注意的细节什么是多态:一个对象具备多种...