当前位置:首页 > VUE

vue实现发送值接受值

2026-03-06 20:08:07VUE

Vue 实现组件间传值

Vue 中组件间传值可以通过多种方式实现,以下是常见的方法:

父组件向子组件传值(Props)

父组件通过 props 向子组件传递数据。

父组件代码:

<template>
  <ChildComponent :message="parentMessage" />
</template>

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

export default {
  components: {
    ChildComponent
  },
  data() {
    return {
      parentMessage: 'Hello from parent'
    }
  }
}
</script>

子组件代码:

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

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

子组件向父组件传值(自定义事件)

子组件通过 $emit 触发自定义事件,父组件监听该事件并接收数据。

子组件代码:

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

<script>
export default {
  methods: {
    sendMessage() {
      this.$emit('message-sent', 'Hello from child')
    }
  }
}
</script>

父组件代码:

<template>
  <ChildComponent @message-sent="handleMessage" />
</template>

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

export default {
  components: {
    ChildComponent
  },
  methods: {
    handleMessage(msg) {
      console.log(msg) // 输出: Hello from child
    }
  }
}
</script>

兄弟组件间传值(事件总线)

使用一个空的 Vue 实例作为事件总线,实现兄弟组件间的通信。

创建事件总线:

vue实现发送值接受值

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

发送组件代码:

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

<script>
import { EventBus } from './eventBus.js'

export default {
  methods: {
    sendMessage() {
      EventBus.$emit('message-sent', 'Hello from sibling')
    }
  }
}
</script>

接收组件代码:

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

<script>
import { EventBus } from './eventBus.js'

export default {
  data() {
    return {
      message: ''
    }
  },
  created() {
    EventBus.$on('message-sent', msg => {
      this.message = msg
    })
  }
}
</script>

Vuex 状态管理

对于复杂应用,可以使用 Vuex 进行全局状态管理。

安装 Vuex:

npm install vuex

创建 store:

vue实现发送值接受值

// store.js
import Vue from 'vue'
import Vuex from 'vuex'

Vue.use(Vuex)

export default new Vuex.Store({
  state: {
    message: ''
  },
  mutations: {
    setMessage(state, payload) {
      state.message = payload
    }
  },
  actions: {
    updateMessage({ commit }, msg) {
      commit('setMessage', msg)
    }
  },
  getters: {
    getMessage: state => state.message
  }
})

发送组件代码:

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

<script>
export default {
  methods: {
    sendMessage() {
      this.$store.dispatch('updateMessage', 'Hello from Vuex')
    }
  }
}
</script>

接收组件代码:

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

<script>
export default {
  computed: {
    message() {
      return this.$store.getters.getMessage
    }
  }
}
</script>

provide/inject

适用于祖先组件向后代组件传值,主要用于高阶插件/组件库。

祖先组件代码:

<template>
  <ChildComponent />
</template>

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

export default {
  components: {
    ChildComponent
  },
  provide() {
    return {
      providedMessage: 'Hello from ancestor'
    }
  }
}
</script>

后代组件代码:

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

<script>
export default {
  inject: ['providedMessage'],
  data() {
    return {
      message: this.providedMessage
    }
  }
}
</script>

总结

Vue 组件间通信有多种方式,根据不同的场景选择合适的方法:

  • 父子组件间传值使用 props$emit
  • 兄弟组件间传值使用事件总线
  • 复杂应用使用 Vuex 进行状态管理
  • 深层嵌套组件使用 provide/inject

标签: vue
分享给朋友:

相关文章

vue设计与实现下载

vue设计与实现下载

vue设计与实现电子书下载 《Vue.js设计与实现》是一本深入解析Vue.js框架原理的书籍,由霍春阳(HcySunYang)撰写。以下是获取该资源的常见途径: 正版购买渠道 京东、…

vue router 实现

vue router 实现

Vue Router 的实现 Vue Router 是 Vue.js 的官方路由管理器,用于构建单页面应用(SPA)。以下是 Vue Router 的核心实现方式。 安装 Vue Router 通过…

vue实现123456

vue实现123456

Vue 实现数字 123456 的显示 在 Vue 中显示数字 123456 非常简单,可以通过以下方法实现: 方法一:直接在模板中显示 <template> <div>…

vue搜索实现

vue搜索实现

Vue 搜索功能实现方法 基于计算属性的搜索 在 Vue 中可以通过计算属性实现简单的搜索功能。这种方式适合小型数据集,利用 JavaScript 的 filter 方法进行筛选。 data() {…

vue实现增加

vue实现增加

实现 Vue 中的新增功能 在 Vue 中实现新增功能通常涉及数据绑定、表单处理和状态管理。以下是几种常见的实现方式: 数据绑定与列表渲染 通过 v-model 绑定表单输入,使用数组的 push…

vue网页实现

vue网页实现

Vue 网页实现指南 环境准备 安装 Node.js 和 npm/yarn,确保环境配置正确。使用 Vue CLI 或 Vite 创建项目框架,快速搭建开发环境。 npm install -g @v…