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

当一个子组件改变了它的状态时,父组件也会相应地随着子组件改变。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.js directive自定义指令详解

    Vue.js directive自定义指令是Vue.js框架提供的一个强大的功能,可以让我们自定义Vue实例的行为。下面我将为大家详细讲解“Vue.js directive自定义指令详解”完整攻略。 一. Vue.js directive自定义指令详解 在Vue.js中,我们可以通过Vue.directive()方法来自定义指令。该方法接收两个参数:指令的名…

    Vue 2023年5月28日
    00
  • 详解从零搭建 vue2 vue-router2 webpack3 工程

    《详解从零搭建 vue2 vue-router2 webpack3 工程》是一篇教程,它旨在帮助初学者学习如何使用 Vue 2 和 Vue-Router 2 搭建一个简单的 Web 应用程序,同时使用 Webpack 3 来处理依赖,以及使用 ES6 进行编程。以下是它的完整攻略: 介绍 在开始之前,需要了解一些前置知识:Vue.js 是一个渐进式 Java…

    Vue 2023年5月27日
    00
  • vue中使用protobuf的过程记录

    下面是使用protobuf在vue中进行数据序列化和反序列化的完整攻略。 1. 安装protobuf 首先,需要在项目中安装protobuf。可以使用npm进行安装: npm install –save protobufjs 2. 编写protobuf文件 在项目根目录下创建一个文件夹,名称为protos,用于存放所有的protobuf文件。我们以一个简单…

    Vue 2023年5月28日
    00
  • 仿照Element-ui实现一个简易的$message方法

    这是一个完整的攻略,步骤如下: 步骤一:创建组件 首先,我们需要创建一个Vue组件来实现这个消息框功能。 我们可以在src/components目录下创建一个messageBox.vue文件,并在其中写入以下代码: <template> <div v-show="visible" :class="[‘messa…

    Vue 2023年5月29日
    00
  • 解决Echarts 显示隐藏后宽度高度变小的问题

    针对Echarts显示隐藏后宽度高度变小的问题,解决方法如下: 问题分析 Echarts在隐藏和显示时,并没有对宽度和高度进行重新计算,导致当图表重新显示时,图表大小会变小,显示不完整的问题。 解决方法 可以手动计算图表容器的宽度和高度,并调用Echarts的resize方法实现图表大小的更新。 步骤 具体步骤如下: 获取图表容器的宽度和高度 var cha…

    Vue 2023年5月28日
    00
  • Vue读取本地静态文件json的2种方法以及优缺点

    下面是详细的攻略。 Vue如何读取本地静态文件json 在Vue中,我们可以使用以下两种方法读取本地静态文件json。 方法一:使用Ajax来读取本地静态文件json 第一种方法是使用Ajax进行读取,在Vue中可以通过axios库来实现Ajax请求。将本地静态文件JSON作为静态资源放在static文件夹下: |– src | |– App.vue |…

    Vue 2023年5月28日
    00
  • vue实现折线图 可按时间查询

    关于“vue实现折线图 可按时间查询”的过程,我可以提供以下完整攻略: 步骤一:准备数据 首先,我们需要准备一组数据来作为折线图的展示依据。可以使用Mock.js模拟数据,例如: { "result": [ { "date": "2022-01-01", "value": 10 …

    Vue 2023年5月28日
    00
  • Echarts在Taro微信小程序开发中的踩坑记录

    关于“Echarts在Taro微信小程序开发中的踩坑记录”的完整攻略,我会从以下几个方面为您进行详细讲解: 环境搭建 引入Echarts库 Echarts在Taro组件中的使用 Echarts的样式调整 踩坑记录及解决方案 1. 环境搭建 首先,我们需要确保已安装Taro环境。可以使用以下命令进行检查: $ taro info 若未安装,则需要先安装Taro…

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