当前位置:首页 > 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 实例作为事件总线,实现兄弟组件间的通信。

创建事件总线:

// 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:

// 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 组件间通信有多种方式,根据不同的场景选择合适的方法:

vue实现发送值接受值

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

标签: vue
分享给朋友:

相关文章

vue实现自定义登录

vue实现自定义登录

实现自定义登录的基本步骤 在Vue中实现自定义登录功能通常需要结合前端和后端技术。以下是一个基本的实现流程: 创建登录表单组件 使用Vue的单文件组件创建一个登录表单,包含用户名和密码输入框以及提交…

vue 实现关闭

vue 实现关闭

Vue 实现关闭功能的方法 在Vue中实现关闭功能通常涉及组件销毁、模态框隐藏或路由跳转等场景。以下是几种常见实现方式: 销毁当前组件 使用v-if或v-show控制组件显示/隐藏,适用于局部组件:…

vue实现拍照

vue实现拍照

Vue实现拍照功能 在Vue中实现拍照功能通常需要结合浏览器的MediaDevices API和Canvas元素。以下是具体实现方法: 安装依赖(可选) 如果需要更简单的封装,可以安装vue-web…

vue 实现单选

vue 实现单选

使用 v-model 绑定单选值 在 Vue 中,可以通过 v-model 绑定单选按钮的值。定义一个响应式数据(如 selectedOption),并将其与单选按钮的 value 属性关联。…

vue实现计算

vue实现计算

Vue 实现计算的方法 在 Vue 中实现计算功能可以通过多种方式完成,主要包括计算属性(computed)、方法(methods)和侦听器(watch)。以下是具体的实现方法: 计算属性(Comp…

vue实现导入

vue实现导入

Vue 实现文件导入功能 使用 <input type="file"> 元素 在 Vue 模板中添加一个文件输入元素,绑定 change 事件处理函数。 <template>…