当前位置:首页 > 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

如何实现传值vue

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:

如何实现传值vue

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>

后代组件:

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

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

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

相关文章

vue实现无线滚动列表

vue实现无线滚动列表

无限滚动列表的实现方法 在Vue中实现无限滚动列表通常结合监听滚动事件和动态加载数据。以下是几种常见方法: 使用自定义指令 创建自定义指令v-infinite-scroll监听滚动事件: Vu…

vue实现关键词轮播

vue实现关键词轮播

Vue 实现关键词轮播 基础实现方案 使用 Vue 的 v-for 和 setInterval 实现基础轮播效果: <template> <div class="keyword…

vue中登陆实现逻辑

vue中登陆实现逻辑

Vue 中登录实现逻辑 前端实现逻辑 表单验证 使用 Vue 的表单验证库(如 VeeValidate)或自定义验证规则,确保用户输入的账号和密码符合要求。例如,检查邮箱格式、密码长度等。 发送登…

vue实现a4打印模板

vue实现a4打印模板

使用Vue实现A4打印模板 在Vue中实现A4打印模板需要结合CSS的打印样式和Vue的模板渲染能力。以下是具体实现方法: 设置A4纸张尺寸 在CSS中定义A4纸张的标准尺寸(210mm × 297…

vue实现a

vue实现a

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

js实现vue

js实现vue

Vue.js 的基本实现方法 在 JavaScript 中实现 Vue.js 的功能,可以通过直接引入 Vue 库或使用现代构建工具(如 Vite 或 Webpack)。以下是几种常见的实现方式:…