当前位置:首页 > VUE

如何实现传值vue

2026-01-22 00:46:16VUE

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

在父组件中通过v-bind(或简写为:)将数据传递给子组件。子组件通过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触发自定义事件,父组件通过v-on(或简写为@)监听事件并接收数据。

子组件代码:

<template>
  <button @click="sendMessage">Send to Parent</button>
</template>

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

父组件代码:

<template>
  <ChildComponent @message-from-child="handleChildMessage" />
  <p>Received: {{ childMessage }}</p>
</template>

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

export default {
  components: { ChildComponent },
  data() {
    return {
      childMessage: ''
    }
  },
  methods: {
    handleChildMessage(msg) {
      this.childMessage = msg
    }
  }
}
</script>

兄弟组件间传值(Event Bus)

创建一个中央事件总线,通过事件触发和监听实现组件间通信。

创建eventBus.js

import Vue from 'vue'
export const EventBus = new Vue()

发送方组件:

<template>
  <button @click="sendMessage">Send to Sibling</button>
</template>

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

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

接收方组件:

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

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

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

Vuex状态管理(跨组件共享数据)

安装Vuex后创建store实例,通过commit触发mutations或dispatch触发actions来修改状态。

store/index.js:

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

Vue.use(Vuex)

export default new Vuex.Store({
  state: {
    sharedMessage: ''
  },
  mutations: {
    setMessage(state, payload) {
      state.sharedMessage = payload
    }
  },
  actions: {
    updateMessage({ commit }, payload) {
      commit('setMessage', payload)
    }
  }
})

组件中修改状态:

<template>
  <button @click="updateStoreMessage">Update Store</button>
</template>

<script>
export default {
  methods: {
    updateStoreMessage() {
      this.$store.dispatch('updateMessage', 'New shared value')
    }
  }
}
</script>

组件中读取状态:

<template>
  <div>{{ sharedMessage }}</div>
</template>

<script>
export default {
  computed: {
    sharedMessage() {
      return this.$store.state.sharedMessage
    }
  }
}
</script>

使用provide/inject(跨层级组件传值)

祖先组件通过provide提供数据,后代组件通过inject注入数据。

祖先组件:

<template>
  <ChildComponent />
</template>

<script>
export default {
  provide() {
    return {
      providedMessage: 'Provided value'
    }
  }
}
</script>

后代组件:

如何实现传值vue

<template>
  <div>{{ injectedMessage }}</div>
</template>

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

标签: 如何实现vue
分享给朋友:

相关文章

vue如何实现默认页面

vue如何实现默认页面

实现 Vue 默认页面的方法 在 Vue 中实现默认页面通常涉及路由配置。以下是几种常见的方法: 使用路由重定向 在 Vue Router 配置中,可以通过 redirect 属性设置默认路由:…

vue实现a

vue实现a

Vue 实现 A 功能的方法 在 Vue 中实现 A 功能可以通过多种方式,具体取决于 A 功能的具体需求。以下是几种常见的实现方法: 使用 Vue 组件 通过创建自定义组件来实现 A 功能。组件可…

vue实现画图

vue实现画图

Vue 实现画图功能 在 Vue 中实现画图功能通常需要结合 HTML5 的 <canvas> 元素或第三方库。以下是几种常见的方法: 使用原生 Canvas API 通过 Vue 直接…

vue实现123456

vue实现123456

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

vue实现datalist

vue实现datalist

使用 Vue 实现 HTML5 的 datalist 功能 HTML5 的 <datalist> 元素提供了一种自动完成输入框的功能,允许用户在输入时从预定义的选项列表中选择。以下是几种在…

vue jwt实现

vue jwt实现

Vue JWT 实现方法 安装依赖 确保项目中安装了 jsonwebtoken(后端)和 axios(前端)。若使用 Vue 3,可搭配 vue-router 和 pinia(或 vuex)管理状态。…