当前位置:首页 > VUE

vue实现发送值接受值

2026-02-09 20:15:22VUE

父子组件通信

在Vue中,父子组件通信可以通过props和自定义事件实现。父组件通过props向子组件传递数据,子组件通过$emit触发事件向父组件传递数据。

父组件向子组件传递数据:

<template>
  <child-component :message="parentMessage" @update="handleUpdate"></child-component>
</template>

<script>
export default {
  data() {
    return {
      parentMessage: 'Hello from parent'
    }
  },
  methods: {
    handleUpdate(newValue) {
      this.parentMessage = newValue
    }
  }
}
</script>

子组件接收和发送数据:

<template>
  <div>
    <p>接收到的消息: {{ message }}</p>
    <button @click="sendMessage">发送消息给父组件</button>
  </div>
</template>

<script>
export default {
  props: ['message'],
  methods: {
    sendMessage() {
      this.$emit('update', 'Hello from child')
    }
  }
}
</script>

非父子组件通信

对于非父子组件间的通信,可以使用事件总线或Vuex状态管理。

使用事件总线:

vue实现发送值接受值

// eventBus.js
import Vue from 'vue'
export const EventBus = new Vue()

// 组件A发送事件
EventBus.$emit('custom-event', data)

// 组件B接收事件
EventBus.$on('custom-event', data => {
  console.log(data)
})

Vuex状态管理

对于大型应用,推荐使用Vuex进行状态管理。

定义store:

import Vue from 'vue'
import Vuex from 'vuex'

Vue.use(Vuex)

export default new Vuex.Store({
  state: {
    sharedValue: ''
  },
  mutations: {
    updateValue(state, newValue) {
      state.sharedValue = newValue
    }
  },
  actions: {
    setValue({ commit }, value) {
      commit('updateValue', value)
    }
  }
})

组件中使用:

vue实现发送值接受值

<template>
  <div>
    <p>共享值: {{ sharedValue }}</p>
    <input v-model="localValue" @input="updateStore">
  </div>
</template>

<script>
export default {
  computed: {
    sharedValue() {
      return this.$store.state.sharedValue
    }
  },
  data() {
    return {
      localValue: ''
    }
  },
  methods: {
    updateStore() {
      this.$store.dispatch('setValue', this.localValue)
    }
  }
}
</script>

provide/inject

对于深层嵌套组件,可以使用provide/inject。

祖先组件:

export default {
  provide() {
    return {
      sharedData: this.sharedData
    }
  },
  data() {
    return {
      sharedData: 'Some shared data'
    }
  }
}

后代组件:

export default {
  inject: ['sharedData'],
  mounted() {
    console.log(this.sharedData) // 输出: Some shared data
  }
}

标签: vue
分享给朋友:

相关文章

vue设计与实现 书

vue设计与实现 书

vue设计与实现 书 《Vue.js设计与实现》是一本深入探讨Vue.js框架内部原理和设计思想的书籍,适合希望深入理解Vue.js的开发者。以下是关于这本书的详细信息: 书籍内容 《Vue…

vue实现导航栏切图

vue实现导航栏切图

Vue 实现导航栏切图 使用 Vue Router 实现基础导航 在 Vue 项目中,可以通过 Vue Router 实现导航栏的路由切换。创建一个导航栏组件,并在其中使用 <router-li…

vue实现矩阵

vue实现矩阵

Vue 实现矩阵的方法 在 Vue 中实现矩阵操作可以通过多种方式完成,以下是一些常见的方法: 使用二维数组表示矩阵 矩阵可以用二维数组来表示,每个元素对应矩阵中的一个值。在 Vue 的 data…

vue实现复选

vue实现复选

Vue 实现复选框 在 Vue 中实现复选框可以通过 v-model 指令绑定数据,同时结合 input 元素的 type="checkbox" 属性来实现。以下是几种常见的实现方式: 单个复选框…

vue实现骰子

vue实现骰子

Vue 实现骰子功能 创建 Vue 组件 在 Vue 项目中创建一个骰子组件,例如 Dice.vue。该组件包含骰子的外观和逻辑。 <template> <div class=…

vue cli 实现

vue cli 实现

Vue CLI 实现步骤 安装 Vue CLI 确保 Node.js 版本在 8.9 或以上。通过 npm 全局安装 Vue CLI: npm install -g @vue/cli 创建新项目 使…