当前位置:首页 > VUE

vue实现页面传值

2026-02-25 02:56:06VUE

使用 Props 父子组件传值

父组件通过 v-bind 或简写 : 向子组件传递数据,子组件通过 props 接收。父组件中定义数据并绑定到子组件标签上:

<template>
  <ChildComponent :message="parentMessage" />
</template>

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

子组件声明 props 接收数据:

<script>
export default {
  props: ['message'],
  mounted() {
    console.log(this.message) // 输出: Hello from parent
  }
}
</script>

使用自定义事件子传父

子组件通过 $emit 触发事件,父组件通过 v-on 或简写 @ 监听事件。子组件触发事件并传递数据:

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

<script>
export default {
  methods: {
    sendData() {
      this.$emit('child-event', { data: 'Child data' })
    }
  }
}
</script>

父组件监听事件并处理数据:

<template>
  <ChildComponent @child-event="handleChildEvent" />
</template>

<script>
export default {
  methods: {
    handleChildEvent(payload) {
      console.log(payload.data) // 输出: Child data
    }
  }
}
</script>

使用 Vuex 状态管理

适合跨层级或复杂组件通信。定义 store 并管理共享状态:

// store.js
import { createStore } from 'vuex'

export default createStore({
  state: {
    sharedData: null
  },
  mutations: {
    setData(state, payload) {
      state.sharedData = payload
    }
  }
})

组件中提交 mutation 更新状态:

this.$store.commit('setData', 'Global data')

组件中通过计算属性获取状态:

computed: {
  sharedData() {
    return this.$store.state.sharedData
  }
}

使用 Event Bus 跨组件通信

创建全局事件总线实现任意组件间通信。创建 eventBus.js

import { createApp } from 'vue'
export const eventBus = createApp({})

组件A发送事件:

import { eventBus } from './eventBus'
eventBus.config.globalProperties.$emit('custom-event', 'Event data')

组件B监听事件:

import { eventBus } from './eventBus'
eventBus.config.globalProperties.$on('custom-event', (data) => {
  console.log(data) // 输出: Event data
})

使用路由参数传值

通过路由的 paramsquery 传递数据。定义路由时声明参数:

const routes = [
  { path: '/user/:id', component: User }
]

跳转时传递参数:

this.$router.push({ path: '/user/123' })
// 或通过query
this.$router.push({ path: '/user', query: { id: 123 } })

目标组件获取参数:

this.$route.params.id // 获取params
this.$route.query.id  // 获取query

使用 provide/inject 跨层级传值

祖先组件通过 provide 提供数据:

export default {
  provide() {
    return {
      providedData: 'Data from ancestor'
    }
  }
}

后代组件通过 inject 获取数据:

export default {
  inject: ['providedData'],
  mounted() {
    console.log(this.providedData) // 输出: Data from ancestor
  }
}

使用 $refs 直接访问组件

父组件通过 ref 属性获取子组件实例:

<template>
  <ChildComponent ref="childRef" />
  <button @click="callChildMethod">Call Child</button>
</template>

<script>
export default {
  methods: {
    callChildMethod() {
      this.$refs.childRef.childMethod()
    }
  }
}
</script>

子组件定义方法:

vue实现页面传值

export default {
  methods: {
    childMethod() {
      console.log('Child method called')
    }
  }
}

标签: 页面vue
分享给朋友:

相关文章

js实现vue

js实现vue

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

vue computed 实现

vue computed 实现

computed 的基本用法 在 Vue 中,computed 用于声明计算属性,这些属性基于响应式依赖进行缓存。只有当依赖发生变化时,计算属性才会重新计算。 new Vue({ data: {…

vue tab实现

vue tab实现

Vue Tab 实现方法 使用动态组件实现 Tab 在 Vue 中可以通过动态组件 <component :is="currentTab"> 结合 v-for 和 v-bind 实现 Ta…

vue 实现打印

vue 实现打印

Vue 实现打印功能的方法 在Vue项目中实现打印功能,可以通过以下几种方式实现: 使用window.print()方法 通过调用浏览器的原生打印API实现基础打印功能,适用于简单内容打印。 //…

vue 实现流程

vue 实现流程

Vue 实现流程 Vue.js 是一个渐进式 JavaScript 框架,用于构建用户界面。以下是 Vue 实现的基本流程: 安装 Vue.js 通过 CDN 引入或使用 npm/yarn 安装:…

vue实现换页

vue实现换页

Vue实现页面切换的方法 在Vue中实现页面切换通常可以通过Vue Router来完成。Vue Router是Vue.js官方的路由管理器,用于构建单页面应用(SPA)。以下是几种常见的实现方式:…