子组件如何通过v-model实现数据的双向绑定

news/2025/2/27 10:09:27

在 Vue 中,v-model 是一种语法糖,用于在表单元素或者组件上实现双向数据绑定。

下面分别介绍在 Vue 2 和 Vue 3 里子组件使用 v-model 实现数据双向绑定的具体方式。

Vue 2 中使用 v-model 实现双向绑定

在 Vue 2 里,v-model 本质上是 :value@input 的语法糖。子组件需要接收 value 属性,并在数据变化时触发 input 事件。

父组件示例
<template>
  <div>
    <!-- 父组件数据 -->
    <p>父组件的值: {{ parentData }}</p>
    <!-- 使用 v-model 绑定到子组件 -->
    <ChildComponent v-model="parentData" />
  </div>
</template>

<script>
import ChildComponent from './ChildComponent.vue';

export default {
  components: {
    ChildComponent
  },
  data() {
    return {
      parentData: ''
    };
  }
};
</script>
子组件示例
<template>
  <div>
    <!-- 绑定输入框的值到 value 属性 -->
    <input :value="value" @input="updateValue($event.target.value)" />
  </div>
</template>

<script>
export default {
  // 接收父组件传来的 value 属性
  props: ['value'],
  methods: {
    updateValue(newValue) {
      // 触发 input 事件,将新值传递给父组件
      this.$emit('input', newValue);
    }
  }
};
</script>

代码解释

  • 父组件:使用 v-modelparentData 绑定到 ChildComponent 上。
  • 子组件
    • 通过 props 接收 value 属性,用于显示输入框的值。
    • 当输入框的值发生变化时,调用 updateValue 方法,在该方法里使用 $emit('input', newValue) 触发 input 事件,将新值传递给父组件。

Vue 3 中使用 v-model 实现双向绑定

在 Vue 3 中,v-model 对应的 prop 默认是 modelValue,事件是 update:modelValue。同时,使用 <script setup> 语法糖可以让代码更简洁。

父组件示例
<template>
  <div>
    <!-- 父组件数据 -->
    <p>父组件的值: {{ parentData }}</p>
    <!-- 使用 v-model 绑定到子组件 -->
    <ChildComponent v-model="parentData" />
  </div>
</template>

<script setup>
import { ref } from 'vue';
import ChildComponent from './ChildComponent.vue';

// 定义响应式数据
const parentData = ref('');
</script>
子组件示例(使用 <script setup>
<template>
  <div>
    <!-- 绑定输入框的值到 modelValue -->
    <input :value="modelValue" @input="updateValue($event.target.value)" />
  </div>
</template>

<script setup>
import { defineProps, defineEmits } from 'vue';

// 定义 props 接收 modelValue
const props = defineProps(['modelValue']);
// 定义可以触发的事件
const emits = defineEmits(['update:modelValue']);

const updateValue = (newValue) => {
  // 触发 update:modelValue 事件,将新值传递给父组件
  emits('update:modelValue', newValue);
};
</script>

代码解释

  • 父组件:使用 v-modelparentData 绑定到 ChildComponent 上。
  • 子组件
    • 使用 defineProps 接收 modelValue 属性。
    • 使用 defineEmits 定义 update:modelValue 事件。
    • 当输入框的值发生变化时,调用 updateValue 方法,在该方法里使用 emits('update:modelValue', newValue) 触发事件,将新值传递给父组件。

v-model 绑定(Vue 3.4+)

Vue 3.4 及以上版本支持多个 v-model 绑定,允许子组件同时处理多个双向绑定的数据。

父组件示例
<template>
  <div>
    <p>父组件的标题: {{ title }}</p>
    <p>父组件的内容: {{ content }}</p>
    <!-- 使用多个 v-model 绑定到子组件 -->
    <ChildComponent v-model:title="title" v-model:content="content" />
  </div>
</template>

<script setup>
import { ref } from 'vue';
import ChildComponent from './ChildComponent.vue';

const title = ref('');
const content = ref('');
</script>
子组件示例(使用 <script setup>
<template>
  <div>
    <input :value="title" @input="updateTitle($event.target.value)" />
    <textarea :value="content" @input="updateContent($event.target.value)" />
  </div>
</template>

<script setup>
import { defineProps, defineEmits } from 'vue';

// 定义 props 接收多个 v-model 的值
const props = defineProps(['title', 'content']);
// 定义可以触发的事件
const emits = defineEmits(['update:title', 'update:content']);

const updateTitle = (newTitle) => {
  emits('update:title', newTitle);
};

const updateContent = (newContent) => {
  emits('update:content', newContent);
};
</script>

通过以上方式,就能在子组件中使用 v-model 实现数据的双向绑定,无论是 Vue 2 还是 Vue 3 都能根据具体需求灵活运用。


http://www.niftyadmin.cn/n/5869927.html

相关文章

2025最新Flask学习笔记(对照Django做解析)

前言&#xff1a;如果还没学Django的同学&#xff0c;可以看Django 教程 | 菜鸟教程&#xff0c;也可以忽略下文所提及的Django内容&#xff1b;另外&#xff0c;由于我们接手的项目大多都是前后端分离的项目&#xff0c;所以本文会跳过对模板的介绍&#xff0c;感兴趣的朋友可…

《论企业集成平台的理解与应用》审题技巧 - 系统架构设计师

企业集成平台的理解与应用——论文写作框架 一、考点概述 本论题“企业集成平台的理解与应用”主要考察的是计算机软件测试工程师对于企业集成平台&#xff08;EIP&#xff09;的深入理解以及在实际项目中的应用能力。论题涵盖了以下几个核心内容&#xff1a; 首先&#xff…

【QT 一 | 信号和槽】

Qt5基本模块 Qt Creator 中的快捷键 • 注释&#xff1a;ctrl / • 运⾏&#xff1a;ctrl R • 编译&#xff1a;ctrl B • 字体缩放&#xff1a;ctrl 鼠标滑轮 • 查找&#xff1a;ctrl F • 整行移动&#xff1a;ctrl shift ⬆/⬇ • 帮助⽂档&#xff1a;F1 • 自动…

软件工程应试复习(考试折磨版)

针对学校软件工程考试&#xff0c;参考教材《软件工程导论&#xff08;第6版&#xff09;》1-8章 学习的艺术&#xff1a;不断地尝试&#xff0c;我一定会找到高效用的方法&#xff0c;让学习变成一门艺术&#xff0c;从应试备考中解救出我的时间同胞们。 好嘞&#xff01;既然…

数据探索实验

数据探索 1.分析1996~2015年人口总数趋势 ### 1&#xff09;训练要点 &#xff08;1&#xff09;掌握NumPy读取数据的方法 &#xff08;2&#xff09;掌握pyplot基础语法 &#xff08;3&#xff09;掌握散点图绘制方法 ### 2&#xff09;需求说明 人口数据总共有6个特征…

《机器学习数学基础》补充资料:从几何角度理解矩阵

《机器学习数学基础》第 2 章&#xff0c;专门讲解矩阵&#xff0c;因为它在线性代数中占据重要地位&#xff0c;也就是在机器学习中&#xff0c;占据重要定位了。为了更好地理解矩阵&#xff0c;本文从几何角度&#xff0c;更直观地对矩阵的某些性质和特征给予阐述。 注&…

Android OpenGLES2.0开发(十一):渲染YUV

人生如逆旅&#xff0c;我亦是行人 Android OpenGLES开发&#xff1a;EGL环境搭建Android OpenGLES2.0开发&#xff08;一&#xff09;&#xff1a;艰难的开始Android OpenGLES2.0开发&#xff08;二&#xff09;&#xff1a;环境搭建Android OpenGLES2.0开发&#xff08;三&am…

nodejs用ws模块反向代理socks5数据,即用ws写服务端和客户端及加密

首先思路是客户端发送socks5请求数据——>服务端解密并解析socks5数据是否为真&#xff0c;解析出Host和port,并用net.socket访问目标网站&#xff0c;目标网站返回数据&#xff0c;服务端再用ws发送返回数据给客户端 //解析socks5数据和返回socks5格式响应 //在读下面代码…