当前位置:首页 > 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 的模板语法创建基础按钮组件,绑定点击事件处理购物逻辑: <template> <button @click="addToC…

vue实现token

vue实现token

Vue 中实现 Token 认证的方法 在 Vue 中实现 Token 认证通常涉及前端与后端的交互,包括 Token 的获取、存储、发送和刷新等操作。以下是具体实现步骤: 获取 Token 用户登…

vue实现购票

vue实现购票

Vue 实现购票功能 数据结构设计 购票功能通常需要以下数据结构: 场次信息(时间、地点、价格) 座位信息(可选座位、已售座位) 用户订单信息 示例数据结构: data() { return…

vue 实现遮罩

vue 实现遮罩

Vue 实现遮罩层的方法 使用固定定位和透明背景 在Vue中实现遮罩层可以通过CSS固定定位结合透明背景色完成。创建一个全屏遮罩组件,利用position: fixed覆盖整个视窗。 <tem…

proxy实现vue

proxy实现vue

使用 Proxy 实现 Vue 响应式系统 Vue 3 的响应式系统基于 JavaScript 的 Proxy API,通过代理对象实现对属性的拦截和依赖追踪。以下是实现的核心逻辑: 创建响…

vue实现页面

vue实现页面

Vue 实现页面的基本方法 创建 Vue 项目 使用 Vue CLI 快速初始化项目,运行以下命令安装并创建项目: npm install -g @vue/cli vue create my-pro…