Vue2.0子同级组件之间数据交互方法

当我们在Vue2.0中开发应用时,会遇到子组件之间需要传递数据的情况,这时候我们可以使用父子组件传参、eventBus、vuex、$attrs和$emit等方法来实现子组件之间的数据交互。

父子组件传参

父子组件之间传参是Vue2.0提供的最基本的数据交互方式,其核心思想是通过props属性将父组件的数据传递到子组件中,子组件通过props接收这些数据,从而实现子组件对父组件数据的引用和修改。

// 父组件
<template>
  <div>
    <h2>{{parentMsg}}</h2>
    <child :child-msg="childMsg" @child-change="onChildChange"></child>
  </div>
</template>
<script>
  import Child from './Child'
  export default {
    name: 'Parent',
    components: {
      Child
    },
    data () {
      return {
        parentMsg: '我是父组件中的数据',
        childMsg: ''
      }
    },
    methods: {
      onChildChange (data) {
        console.log('子组件传来的数据:', data)
      }
    }
  }
</script>

// 子组件
<template>
  <div>
    <input type="text" v-model="childMsg" @keyup.enter="onChange">
  </div>
</template>
<script>
  export default {
    name: 'Child',
    props: {
      childMsg: {
        type: String,
        default: ''
      }
    },
    methods: {
      onChange () {
        this.$emit('child-change', this.childMsg)
      }
    }
  }
</script>

在上面的代码中,父组件通过props将childMsg数据传递给子组件,在子组件中通过$emit触发child-change事件,将childMsg数据传递给父组件。

eventBus

eventBus是一个空的Vue实例,可以用来充当组件之间的中介者,可以订阅和发布事件来实现跨组件的数据传递。

// eventBus.js
import Vue from 'vue'
export default new Vue()

// 父组件
<template>
  <div>
    <h2>{{parentMsg}}</h2>
    <child></child>
  </div>
</template>
<script>
  import eventBus from './eventBus'
  export default {
    name: 'Parent',
    data () {
      return {
        parentMsg: '我是父组件中的数据'
      }
    },
    mounted () {
      eventBus.$on('child-change', data => {
        console.log('子组件传来的数据:', data)
      })
    }
  }
</script>

// 子组件
<template>
  <div>
    <input type="text" v-model="childMsg" @keyup.enter="onChange">
  </div>
</template>
<script>
  import eventBus from './eventBus'
  export default {
    name: 'Child',
    data () {
      return {
        childMsg: ''
      }
    },
    methods: {
      onChange () {
        eventBus.$emit('child-change', this.childMsg)
      }
    }
  }
</script>

在上面的代码中,我们通过一个空的Vue实例eventBus实现了父组件与子组件之间的数据传递。父组件中通过$on方法订阅了eventBus实例中的child-change事件,当子组件中通过$emit方法触发child-change事件时,就可以将数据传递给父组件。

$attrs和$emit

$attrs和$emit是Vue2.4版本开始提供的新特性,可以通过$attrs获取父组件传递给子组件的所有属性,通过$emit将事件传递给父组件。

// 父组件
<template>
  <div>
    <h2>{{parentMsg}}</h2>
    <child v-bind="$attrs" @child-change="onChildChange"></child>
  </div>
</template>
<script>
  import Child from './Child'
  export default {
    name: 'Parent',
    components: {
      Child
    },
    data () {
      return {
        parentMsg: '我是父组件中的数据'
      }
    },
    methods: {
      onChildChange (data) {
        console.log('子组件传来的数据:', data)
      }
    }
  }
</script>

// 子组件
<template>
  <div>
    <input type="text" v-model="childMsg" @keyup.enter="onChange">
  </div>
</template>
<script>
  export default {
    name: 'Child',
    inheritAttrs: false,
    data () {
      return {
        childMsg: ''
      }
    },
    methods: {
      onChange () {
        this.$emit('child-change', this.childMsg)
      }
    }
  }
</script>

在上面的代码中,我们通过v-bind="$attrs"将所有属性传递给了子组件,然后在子组件中通过inheritAttrs: false禁用了默认的属性继承,这样就只能通过$attrs获取属性。通过$emit将事件传递给父组件。

以上是Vue2.0子同级组件之间的数据交互方法的详细讲解,希望对您有所帮助。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Vue2.0子同级组件之间数据交互方法 - Python技术站

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

相关文章

  • vue异步组件与组件懒加载问题(import不能导入变量字符串路径)

    简介 在Vue应用程序中,我们可以使用异步组件来提高应用程序的性能。但是,在使用Vue异步加载组件的时候,可能会遇到组件懒加载问题和导入变量字符串路径问题。 在本文中,我们将介绍Vue异步组件及其使用方法,解决组件懒加载问题和导入变量字符串路径问题。 Vue异步组件 在Vue中,异步组件的目的是为了提高应用程序的性能,即只有在它们需要被渲染时才会被加载。 在…

    Vue 2023年5月27日
    00
  • vue中使用js-xlsx导出excel的实现方法

    当需要在Vue中生成Excel文件时,可以使用js-xlsx库来实现。下面是具体步骤: 步骤一:安装依赖 在终端中输入以下命令安装js-xlsx依赖: npm install xlsx 步骤二:导入依赖 在需要使用js-xlsx的组件上方,引入js-xlsx: import xlsx from ‘xlsx’ 步骤三:生成excel数据 在需要生成excel的…

    Vue 2023年5月27日
    00
  • 一文搞懂Vue3中watchEffect侦听器的使用

    下面是详细讲解: 一文搞懂Vue3中watchEffect侦听器的使用 简介 在Vue3中,watchEffect是一个侦听器函数,它接收一个响应式数据对象,并在该对象发生变化时执行指定的callback函数。相比于Vue2的watch,它是基于响应式数据的,不需要指定要侦听的属性名,当数据变化时立刻执行回调。watchEffect的使用可以让你更加灵活地监…

    Vue 2023年5月28日
    00
  • Vue.JS入门教程之处理表单

    下面就来详细讲解如何处理表单的相关内容。 一、表单基础 1.1 表单元素 表单是Web应用程序中不可或缺的组成部分,它允许用户输入数据并将其提交给服务端进行处理。表单由一个或多个表单元素组成,常见的表单元素包括: input:文本输入框、复选框、单选框等 select:下拉框 textarea:文本域 button:提交按钮、重置按钮等 label:表单元素…

    Vue 2023年5月27日
    00
  • vue的v-if里实现调用函数

    要在Vue的v-if指令中调用函数,可以按照以下步骤进行操作: 步骤1:定义一个方法 首先,在Vue组件的js文件或script标签中,在methods对象中定义一个方法,这个方法可以返回true或false。例如: methods: { isAdmin() { return true; } } 这个方法将返回true,这意味着当前用户是管理员。如果当前用户…

    Vue 2023年5月28日
    00
  • 分享9个Vue的巧妙冷技巧

    下面是分享9个Vue的巧妙冷技巧的完整攻略: 分享9个Vue的巧妙冷技巧 1. 利用v-model双向绑定 v-model是Vue的一个指令,可以在表单元素上进行双向数据绑定。可以用v-model实现一个简单的计数器应用。 <template> <div> <button @click="increment"…

    Vue 2023年5月27日
    00
  • 浅谈 vue 中的 watcher

    关于“浅谈 Vue 中的 Watcher”,我将分以下几个部分来详细阐述。 Watcher 概述 在 Vue 中,Watcher 是一个可以观察并响应数据变化的对象。当数据变化时,Watcher 会自动重新渲染视图。 在 Vue 中有三种 Watcher:Computed Watcher、User Watcher 和渲染 Watcher。其中,Compute…

    Vue 2023年5月28日
    00
  • 关于Vue中axios的封装实例详解

    下面我将为你详细讲解关于Vue中axios的封装实例详解。 1. axios是什么? axios是一个基于Promise的HTTP客户端,用于浏览器和node.js的请求发送。它可以用于简单地进行HTTP请求,也可以进行拦截请求和响应,转换请求和响应数据,取消请求等操作。 2. axios的优点 基于Promise,易于使用 支持拦截请求和响应 支持转换请求…

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