当前位置:首页 > VUE

vue实现传值

2026-02-19 11:00:31VUE

Vue 传值方法

Vue 提供了多种组件间传值的方式,适用于不同场景的需求。以下是常见的传值方法:

Props 父传子

父组件通过属性向子组件传递数据,子组件通过 props 接收:

<!-- 父组件 -->
<template>
  <ChildComponent :message="parentMessage" />
</template>

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

<!-- 子组件 -->
<script>
export default {
  props: ['message'],
  mounted() {
    console.log(this.message) // Hello from parent
  }
}
</script>

$emit 子传父

子组件通过事件向父组件传递数据:

<!-- 子组件 -->
<template>
  <button @click="sendMessage">Send</button>
</template>

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

<!-- 父组件 -->
<template>
  <ChildComponent @message="handleMessage" />
</template>

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

Event Bus 跨组件通信

创建全局事件总线实现任意组件间通信:

// event-bus.js
import Vue from 'vue'
export const EventBus = new Vue()
// 发送组件
EventBus.$emit('event-name', data)

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

Vuex 状态管理

适用于大型应用的状态集中管理:

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

Vue.use(Vuex)

export default new Vuex.Store({
  state: {
    count: 0
  },
  mutations: {
    increment(state) {
      state.count++
    }
  }
})
// 组件中使用
this.$store.commit('increment')
console.log(this.$store.state.count)

provide/inject 跨层级传值

祖先组件向后代组件注入依赖:

// 祖先组件
export default {
  provide() {
    return {
      theme: 'dark'
    }
  }
}

// 后代组件
export default {
  inject: ['theme'],
  created() {
    console.log(this.theme) // dark
  }
}

$attrs/$listeners 高阶传值

传递未在 props 中声明的属性和事件:

<!-- 父组件 -->
<ChildComponent :title="title" @custom="handler" />

<!-- 中间组件 -->
<GrandChild v-bind="$attrs" v-on="$listeners" />

<!-- 最终子组件 -->
export default {
  props: ['title'],
  mounted() {
    this.$emit('custom') // 触发父组件handler
  }
}

$parent/$children 直接访问

直接访问父/子组件实例(不推荐):

vue实现传值

// 访问父组件数据
this.$parent.someData

// 访问子组件方法
this.$children[0].someMethod()

每种传值方法适用于不同场景,应根据具体需求选择最合适的方式。简单父子通信使用 props/$emit,复杂应用建议采用 Vuex 管理状态。

标签: vue
分享给朋友:

相关文章

vue slot实现

vue slot实现

vue slot 的实现方法 在 Vue 中,slot 是一种内容分发机制,允许父组件向子组件传递模板内容。以下是几种常见的 slot 实现方式: 默认 slot 默认 slot 是最基础的 slo…

vue实现modal

vue实现modal

Vue 实现 Modal 弹窗组件 使用 Vue 实现 Modal 弹窗组件可以通过多种方式,包括原生 Vue 组件、第三方库或自定义指令。以下是几种常见方法: 原生 Vue 组件实现 创建一个基础…

vue实现handsontable

vue实现handsontable

Vue 中实现 Handsontable 要在 Vue 项目中集成 Handsontable,可以使用官方提供的 @handsontable/vue 封装库。以下是一个完整的实现步骤。 安装依赖 确…

vue实现suspense

vue实现suspense

Vue 3 中实现 Suspense Suspense 是 Vue 3 引入的一个内置组件,用于处理异步依赖的加载状态。它允许在等待异步组件或异步数据加载时显示一个后备内容(fallback),直到异…

vue实现录像

vue实现录像

Vue 实现录像功能 在 Vue 中实现录像功能通常需要借助浏览器的 MediaDevices API 和 MediaRecorder API。以下是实现步骤: 获取用户摄像头和麦克风权限 使用 n…

vue实现心电图

vue实现心电图

Vue 实现心电图效果 在 Vue 中实现心电图效果通常需要结合 Canvas 或 SVG 进行动态绘图,模拟心电图数据的实时变化。以下是两种实现方式的核心思路和代码示例: 使用 Canvas 绘制…