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

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如何在style标签中使用变量(数据)详解

    下面是“vue如何在style标签中使用变量(数据)详解”的完整攻略: 1. 介绍 Vue提供了一个非常方便的方法,允许您在模板中和js代码中使用变量,但是在style标签中使用变量比较麻烦。通常情况下,我们可以使用CSS预处理器来处理这个问题,比如Sass或者Less。不过Vue还提供了其他办法,来让我们方便地在style标签中使用变量,下面将详细介绍。 …

    Vue 2023年5月27日
    00
  • 分享一个基于Ace的Markdown编辑器

    请看下面的完整攻略: 分享一个基于Ace的Markdown编辑器 步骤1:下载并引入Ace编辑器 Ace是一个通用的代码编辑器,我们可以在官方网站下载最新版本的Ace。在下载后,我们需要将其引入我们的HTML文件中。 <!– 引入相关CSS文件 –> <link rel="stylesheet" href=&quot…

    Vue 2023年5月28日
    00
  • Vue中如何给Window对象添加方法

    在Vue中给Window对象添加方法,一般需要结合Vue的生命周期或其他Vue的API。下面提供两种方法来实现: 方法一:通过Vue.mixin全局混入 Vue.mixin可以给所有Vue实例添加一个混入对象,这个混入对象在每个Vue实例中都会合并到Vue.options对象中。我们可以在这个混入对象中定义window的方法。 首先,在main.js文件中定…

    Vue 2023年5月28日
    00
  • Vue路由传参页面刷新后参数丢失原因和解决办法

    关于Vue路由传参页面刷新后参数丢失的原因和解决办法,我来给你详细阐述一下: 1. 原因 当我们在Vue的单页面应用中进行路由跳转时,可能会需要传递一些参数到目标组件中,而Vue提供了通过路由传参的方式来实现这一功能。但是,当我们刷新目标组件页面时,之前传递的参数会丢失,这是因为路由传参参数默认只存在于内存中,而不会被保存在浏览器的历史记录中。因此,当页面刷…

    Vue 2023年5月27日
    00
  • vue组件生命周期钩子使用示例详解

    Vue组件生命周期钩子使用示例详解 在Vue组件的生命周期中,每个实例会从创建、挂载、更新、销毁四个不同的阶段。在这些不同的阶段中,我们可以通过使用生命周期钩子函数来控制组件的行为。本文将详细讲解Vue组件生命周期钩子函数的使用方法,并通过示例代码介绍其具体应用。 Vue组件生命周期钩子函数 Vue组件生命周期可以分为8个阶段,每个阶段都有对应的生命周期钩子…

    Vue 2023年5月27日
    00
  • vue a标签点击实现赋值方式

    下面是关于“vue a标签点击实现赋值方式”的完整攻略。 思路 在Vue中,我们可以直接通过v-bind指令将数据绑定到HTML标签的属性上,然后通过v-on指令监听标签上的事件,使得在事件触发时可以改变数据的值。因此,针对“vue a标签点击实现赋值方式”的问题,我们的思路是,使用v-bind指令将需要赋值的数据绑定到a标签的属性上,然后使用v-on指令监…

    Vue 2023年5月27日
    00
  • vue.js移动数组位置,同时更新视图的方法

    要移动 Vue 中的数组位置并更新视图,常用的方法是: 使用 splice 方法直接修改数组,再触发更新操作; 使用 Vue.set 或 this.$set 方法,更新数组指定索引值的数据并触发更新操作。 下面分别介绍这两种方法的使用。 1. 使用 splice 方法直接修改数组 最常见的移动数组位置操作就是将某个元素往前或往后移动,以 arr[i] 为例,…

    Vue 2023年5月29日
    00
  • Vue中mixins的使用方法以及实际项目应用指南

    下面我来讲解“Vue中mixins的使用方法以及实际项目应用指南”的完整攻略。 1. Vue中mixins的使用方法 1.1 什么是Mixin Mixin是一种在Vue中复用组件选项的方式,可以把多个组件共用的选项提取出来,封装成一个Mixin对象,让组件引入该对象后便可共享其属性和方法。 1.2 Mixin的定义方式 在Vue中,Mixins对象可以包含组…

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