当前位置:首页 > 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 实现toast

vue 实现toast

vue 实现 toast 的方法 在 Vue 中实现 Toast 提示功能可以通过多种方式,以下是几种常见的实现方法: 使用第三方库 Vue 生态中有许多成熟的 Toast 库,例如 vue-toa…

vue实现逻辑

vue实现逻辑

Vue 实现逻辑的核心概念 Vue.js 是一个渐进式 JavaScript 框架,其核心逻辑围绕数据驱动和组件化开发。通过响应式系统、虚拟 DOM 和组件生命周期等机制,Vue 实现了高效的前端开发…

vue实现上传

vue实现上传

Vue 文件上传实现方法 使用 Vue 实现文件上传可以通过原生 HTML5 的 <input type="file"> 元素结合 Vue 的事件处理和数据绑定来实现。 基础实现步骤…

vue实现getapp

vue实现getapp

Vue 中实现全局获取应用实例的方法 在 Vue 3 中,可以通过 getCurrentInstance 方法获取当前组件实例,但需要明确其使用场景和限制。以下是具体实现方式: 方法一:通过 get…

vue实现插件

vue实现插件

Vue 插件实现方法 Vue 插件通常用于为 Vue 应用添加全局功能或共享功能。以下是实现 Vue 插件的核心步骤: 插件基本结构 Vue 插件需要暴露一个 install 方法,该方法接收 Vu…

vue实现书库

vue实现书库

Vue 实现书库功能 使用 Vue 构建书库功能需要结合前端框架和后端数据管理。以下是实现步骤和关键点: 项目初始化 使用 Vue CLI 或 Vite 初始化项目,安装 Vue Router 和状…