Vue组件通信方式(父传子、子传父、兄弟通信)

yizhihongxing

Vue组件通信是非常重要的技能,因为在实际开发过程中,我们需要将不同的组件拼接起来形成一个完整的网站或应用。在Vue中,组件通信主要有三种方式:父传子、子传父和兄弟通信。

父传子

父传子通信是指父组件将数据或方法通过属性的方式传递给子组件。子组件可以通过props接收父组件的数据,并且可以使用这些数据来渲染页面或触发某些行为。

父组件中的代码:

<template>
  <div>
    <child :message="msg"></child>
  </div>
</template>

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

export default {
  components: {
    Child
  },
  data() {
    return {
      msg: 'Hello Vue!'
    }
  }
}
</script>

子组件中的代码:

<template>
  <div>
    {{ message }}
  </div>
</template>

<script>
export default {
  props: {
    message: {
      type: String,
      required: true
    }
  }
}
</script>

在以上代码中,父组件通过v-bind指令将msg数据传递给子组件,子组件通过props接收这个数据并渲染到页面上。

子传父

子传父通信是指子组件通过$emit方法向父组件传递数据或触发事件。父组件可以通过在子组件上绑定监听事件来接收子组件的数据或行为。

子组件中的代码:

<template>
  <div>
    <button @click="sendMessage">Send Message</button>
  </div>
</template>

<script>
export default {
  data() {
    return {
      message: 'Hello Vue!'
    }
  },
  methods: {
    sendMessage() {
      this.$emit('message', this.message)
    }
  }
}
</script>

父组件中的代码:

<template>
  <div>
    <child @message="handleMessage"></child>
  </div>
</template>

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

export default {
  components: {
    Child
  },
  methods: {
    handleMessage(msg) {
      console.log(msg)
    }
  }
}
</script>

在以上代码中,子组件通过$emit方法向父组件传递了一个名为'message'的事件,并且传递了一个数据(this.message),父组件在子组件上通过@message监听这个事件,并且使用handleMessage方法接收子组件传递的数据。

兄弟通信

兄弟通信是指两个没有直接父子关系的组件之间的通信。为了实现这种通信方式,我们需要使用一个中央事件总线或状态管理器。

中央事件总线实现方式:

<template>
  <div>
    <button @click="sendMessage">Send Message</button>
  </div>
</template>

<script>
export default {
  methods: {
    sendMessage() {
      Event.$emit('message', 'Hello Vue!')
    }
  }
}

const Event = new Vue() // 中央事件总线
</script>
<template>
  <div>
    {{ message }}
  </div>
</template>

<script>
export default {
  data() {
    return {
      message: ''
    }
  },
  mounted() {
    Event.$on('message', (msg) => {
      this.message = msg
    })
  }
}

const Event = new Vue() // 中央事件总线
</script>

在以上代码中,两个没有直接父子关系的组件都使用了同一个中央事件总线,并通过$emit方法和$on方法实现了数据的传递。

状态管理器实现方式:

<template>
  <div>
    <button @click="sendMessage">Send Message</button>
  </div>
</template>

<script>
import store from './store'

export default {
  methods: {
    sendMessage() {
      store.commit('setMessage', 'Hello Vue!')
    }
  }
}
</script>
<template>
  <div>
    {{ message }}
  </div>
</template>

<script>
import store from './store'

export default {
  data() {
    return {
      message: ''
    }
  },
  mounted() {
    this.message = store.state.message
    store.watch(
      (state) => state.message,
      (newVal) => {
        this.message = newVal
      }
    )
  }
}
</script>
// store.js
import Vue from 'vue'
import Vuex from 'vuex'

Vue.use(Vuex)

const store = new Vuex.Store({
  state: {
    message: ''
  },
  mutations: {
    setMessage(state, msg) {
      state.message = msg
    }
  }
})

export default store

在以上代码中,两个没有直接父子关系的组件都共享了同一个状态管理器,通过commit方法和watch方法实现了数据的传递和响应。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Vue组件通信方式(父传子、子传父、兄弟通信) - Python技术站

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

相关文章

  • Vue中foreach数组与js中遍历数组的写法说明

    关于Vue中forEach数组与JavaScript中遍历数组的写法说明,我来给您详细讲解一下。 1. JavaScript中遍历数组的写法 在JavaScript中,我们可以使用for循环遍历数组,也可以使用forEach方法遍历数组。具体写法如下: 1.1 使用for循环遍历数组 let arr = [1, 2, 3, 4, 5] for (let i …

    Vue 2023年5月28日
    00
  • Vue.use与Vue.prototype的区别及说明

    Vue.use与Vue.prototype的区别及说明 Vue.use Vue.use 是 Vue.js 的一个全局API,用于安装Vue.js插件。其作用就是将一个插件安装到Vue.js应用程序中。 Vue.use 的基本语法为: Vue.use(plugin) 其中,plugin 是指需要安装的插件。插件本质上就是一个具有install方法的对象或者函数…

    Vue 2023年5月27日
    00
  • Vue.js响应式数据的简单实现方法(一看就会)

    我会根据这个题目,给你提供一个完整markdown格式文本的攻略。 Vue.js响应式数据的简单实现方法(一看就会) Vue.js作为比较流行的前端JS框架,其中响应式数据是它所支持的重要特性之一。那么,对于Vue.js响应式数据的实现方法,我会在下面介绍一些可以让初学者一看就会的方法。 实现原理 Vue.js的实现原理是基于ES5中的Object.defi…

    Vue 2023年5月28日
    00
  • Vue动态表单的应用详解

    下面是关于“Vue动态表单的应用详解”的完整攻略。 简介 Vue动态表单的应用指的是根据不同的数据进行表单渲染,并可以根据用户的不同操作对表单进行相应的变动。这种技术通常被应用于一些需要根据不同的业务场景生成不同表单的场合,例如表单生成器、问卷调查等。 实现方法 实现 Vue 动态表单的关键在于动态渲染表单,引入 element-ui 的动态表单是实现这个功…

    Vue 2023年5月28日
    00
  • Vue 搭建Vuex环境详解

    Vue 搭建Vuex环境详解 简介 Vuex是Vue.js的官方状态管理库,它可以更好的管理Vue.js应用中的数据流,包括数据的状态、存储和同步。社区中已经有很多文章介绍Vuex的基础使用,本文将详细讲解如何在Vue.js中搭建Vuex环境,并提供两个示例说明。 搭建Vuex环境 安装Vuex 在Vue.js项目中使用Vuex,需要先安装它。 npm in…

    Vue 2023年5月28日
    00
  • 详解vue.js移动端配置flexible.js及注意事项

    详解vue.js移动端配置flexible.js及注意事项 介绍 随着移动端市场的扩大,越来越多的网站和应用开始关注移动端的适配问题。Vue.js作为一种前端开发的流行框架,也需要考虑移动端适配问题。本文将介绍如何在Vue.js中配置flexible.js实现移动端适配,以及在使用过程中需要注意的细节。 flexible.js介绍 flexible.js是淘…

    Vue 2023年5月28日
    00
  • 详解SpringMVC如何进行数据回显

    下面是关于“详解SpringMVC如何进行数据回显”的完整攻略。 一、什么是数据回显 在Web开发中,数据回显是指当出现表单提交后,由于某些原因(如数据验证未通过,数据存储出错等)导致当前页面跳转到另一个页面后,原本用户已经填写的数据丢失,需要重新填写。为了减少用户的操作负担,需要将用户已经填写的数据重新显示回表单中,这就是数据回显。 二、SpringMVC…

    Vue 2023年5月28日
    00
  • Vue中的同步和异步调用顺序详解

    Vue中的同步和异步调用顺序详解 前言 在Vue的开发过程中,同步和异步调用顺序经常是我们需要关注的问题。本篇文章主要讲解同步和异步调用的概念,并通过示例来详细说明Vue中同步和异步调用的顺序。 同步和异步调用的概念 在JavaScript中,同步调用是指函数按照代码的顺序依次执行,执行完一个函数后才能执行下一个函数。异步调用则是指函数不按照代码的顺序执行,…

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