vue 父组件通过v-model接收子组件的值的代码

yizhihongxing

当一个子组件改变了它的状态时,父组件也会相应地随着子组件改变。Vue提供了 v-model 指令来实现这种双向绑定的效果。在子组件中,要使用 this.$emit('input', value) 将数据通过 input 事件的方式发送到父组件中,然后父组件通过 v-model 指令绑定这个事件和值即可。

举例来说,我们现在有一个父组件 Parent.vue 和一个子组件 Child.vue,其中 Child.vue 是一个输入框组件,父组件需要根据该输入框的值显示一些特定内容。具体实现的步骤如下:

  1. Child.vue 中,定义一个 value 变量,并在输入框上绑定 v-model="value"
<template>
  <div>
    <input type="text" v-model="value" />
  </div>
</template>

<script>
export default {
  data() {
    return {
      value: '',
    };
  },
  mounted() {
    // 组件挂载后,给输入框赋默认值
    this.value = 'Hello World';
  },
  watch: {
    value(newValue) {
      // 监听输入框的值,当发生改变时触发 input 事件
      this.$emit('input', newValue);
    },
  },
};
</script>
  1. Parent.vue 中,引入 Child.vue 组件,并在组件上使用 v-model 指令绑定父组件的值:
<template>
  <div>
    <Child v-model="parentValue" />
    <p>父组件的值:{{parentValue}}</p>
  </div>
</template>

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

export default {
  components: {
    Child,
  },
  data() {
    return {
      parentValue: '',
    };
  },
};
</script>

在上面的代码中,我们将 Child.vue 组件引入到了 Parent.vue 中,并在组件上使用了 v-model="parentValue",父组件的值 parentValue 就通过 input 事件传递给了子组件 Child.vue

当我们在输入框中输入数据时,Child.vue 组件中的 watch 监听器会检测到数据的变化,然后通过 $emit 方法将这个变化通过 input 事件发送到父组件 Parent.vue 中,然后 v-model 绑定的 parentValue 也同时发生了变化,最后通过插值的方式输出 parentValue 的值。

下面再给出一个示例,演示如何在子组件中通过 emit 方法发送自定义的事件和值,然后在父组件中监听这些事件,并修改相应的数据。

  1. Child.vue 中,定义一个点击按钮,当点击该按钮时,向父组件传递一个自定义的事件和值:
<template>
  <div>
    <button @click="emitCustomEvent">点击我,通知父组件</button>
  </div>
</template>

<script>
export default {
  methods: {
    emitCustomEvent() {
      const eventData = {
        name: 'custom event',
        value: Math.random(),
      };
      // 通过自定义事件名和数据,向父组件发送数据
      this.$emit('custom-event', eventData);
    },
  },
};
</script>
  1. Parent.vue中,监听自定义事件,并修改对应的数据:
<template>
  <div>
    <Child @custom-event="handleCustomEvent" />
    <p>父组件监听到子组件发送的自定义事件:{{customStr}}</p>
  </div>
</template>

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

export default {
  components: {
    Child,
  },
  data() {
    return {
      customStr: '',
    };
  },
  methods: {
    handleCustomEvent(data) {
      // 监听到自定义事件后,修改数据
      this.customStr = `事件名称: ${data.name}, 随机数: ${data.value}`;
    },
  },
};
</script>

在上面的代码中,我们先在 Child.vue 中定义了一个 emitCustomEvent 方法,然后在这个方法中通过 $emit 方法向父组件发送一个自定义事件 custom-event,并且传递了一个对象 {name: 'custom event', value: Math.random()}

Parent.vue 中,我们引入了 Child.vue 组件,并通过 @custom-event="handleCustomEvent" 监听子组件发送的自定义事件,当监听到该事件时,就触发 handleCustomEvent 方法,并修改 customStr 的值。

通过上述两个示例的说明,可以很好地理解如何在 Vue 的父子组件之间进行双向绑定和事件传递。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:vue 父组件通过v-model接收子组件的值的代码 - Python技术站

(0)
上一篇 2023年5月27日
下一篇 2023年5月27日

相关文章

  • Vue编译优化实现流程详解

    为了让读者更好地理解“Vue编译优化实现流程”,本篇攻略将会分为以下几个部分进行详细讲解: 什么是Vue编译优化 Vue编译优化实现流程详解 parse函数解析模板 optimize函数优化模板 generate函数生成渲染函数 示例说明 静态节点优化示例 静态属性提升示例 什么是Vue编译优化 Vue编译优化可以让我们在运行时生成更小、更快的Vue渲染函数…

    Vue 2023年5月27日
    00
  • 详细聊聊Vue的混入和继承

    详细聊聊Vue的混入和继承 什么是混入? 混入是一个编程技术,它可以将一个对象的所有属性复制到另一个对象上。在Vue中,混入可以用来在多个组件之间共享代码。具体来说,混入提供了一种将重复代码抽象成可重用性组件的方式,而不是从对一个组件的功能进行继承。 下面是一个示例: // 混入对象 const myMixin = { data() { return { m…

    Vue 2023年5月28日
    00
  • 关于Vue不能监听(watch)数组变化的解决方法

    讲解“关于Vue不能监听(watch)数组变化的解决方法”的完整攻略分为以下几个部分: 问题背景 解决方法一:使用Vue提供的$set方法 解决方法二:使用深度监听watch 示例说明1:使用$set方法动态添加数组元素 示例说明2:使用深度监听watch监听数组变化 1. 问题背景 在Vue中,数组是一种重要的数据类型,但其本身是无法触发响应,也就无法直接…

    Vue 2023年5月29日
    00
  • Vue2学习笔记之请求数据交互vue-resource

    下面是关于“Vue2学习笔记之请求数据交互vue-resource”的完整攻略: 1. 什么是vue-resource vue-resource 是一个基于 Vue.js 的网络请求库,它提供了一组网络请求、数据处理的功能,让我们可以轻松地进行数据交互。 2. 安装vue-resource 在使用之前,我们需要先安装 vue-resource 依赖: npm…

    Vue 2023年5月28日
    00
  • 在Vue项目中用fullcalendar制作日程表的示例代码

    下面是用fullcalendar制作日程表的完整攻略。 1. 安装fullcalendar 在Vue项目中使用fullcalendar前,我们需要先安装fullcalendar插件及其相关依赖。我们可以使用 npm 进行安装: npm install @fullcalendar/vue @fullcalendar/core @fullcalendar/com…

    Vue 2023年5月29日
    00
  • vue+iview实现文件上传

    下面是详细讲解”vue+iview实现文件上传”的完整攻略: 准备工作 在项目中安装vue和iview npm install vue iview –save 在main.js中引入vue和iview,并配置相关的组件 import Vue from ‘vue’ import iView from ‘iview’ import ‘iview/dist/st…

    Vue 2023年5月28日
    00
  • 分析总结20道Vue高频面试题

    下面我将详细讲解“分析总结20道Vue高频面试题”的完整攻略。 一、了解Vue 在面试前,必须要对Vue的基本概念有所了解,包括数据双向绑定、组件化、生命周期等。我们可以通过查阅官方文档或者一些Vue相关的博客、教程来深入学习Vue。 二、掌握Vue核心思想 Vue的核心思想有两个:响应式数据和组件系统。了解这两个思想能够让我们更好地理解和应对Vue相关的问…

    Vue 2023年5月27日
    00
  • vue scss后缀文件background-image路径错误的解决

    当使用Vue结合SCSS编写样式时,如果在样式中设置了background-image属性,并且设置的路径存在问题,那么会导致图片无法正常加载。下面是解决该问题的完整攻略: 问题分析 样式中设置background-image属性使用的是相对路径,而在Vue项目中,其相对路径往往是相对于main.js文件或者Vue组件所在位置的路径。如果图片的相对路径出现问…

    Vue 2023年5月28日
    00
合作推广
合作推广
分享本页
返回顶部