当前位置:首页 > VUE

vue实现页面逆传

2026-01-20 20:12:30VUE

Vue 实现页面逆传(反向传值)

在 Vue 中实现页面逆传(即子组件向父组件传值或兄弟组件间传值)可以通过以下几种方式:

使用 $emit 触发自定义事件

子组件通过 $emit 触发一个自定义事件,父组件监听该事件并接收数据。

子组件代码:

<template>
  <button @click="sendData">传递数据给父组件</button>
</template>

<script>
export default {
  methods: {
    sendData() {
      this.$emit('child-event', { message: '数据来自子组件' });
    }
  }
}
</script>

父组件代码:

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

<script>
export default {
  methods: {
    handleChildEvent(data) {
      console.log(data.message); // 输出:数据来自子组件
    }
  }
}
</script>

使用 v-model 实现双向绑定

通过 v-modelprops + $emit 结合实现双向数据绑定。

子组件代码:

<template>
  <input :value="value" @input="$emit('input', $event.target.value)" />
</template>

<script>
export default {
  props: ['value']
}
</script>

父组件代码:

<template>
  <child-component v-model="parentData" />
</template>

<script>
export default {
  data() {
    return {
      parentData: ''
    }
  }
}
</script>

使用 Vuex 状态管理

对于跨组件或复杂场景,可以使用 Vuex 集中管理状态。

vue实现页面逆传

Vuex Store 示例:

const store = new Vuex.Store({
  state: {
    sharedData: null
  },
  mutations: {
    updateData(state, payload) {
      state.sharedData = payload;
    }
  }
});

组件中调用:

// 设置数据
this.$store.commit('updateData', { message: '共享数据' });

// 获取数据
this.$store.state.sharedData;

使用 Event Bus

创建一个全局事件总线,用于任意组件间通信。

创建 Event Bus:

vue实现页面逆传

// event-bus.js
import Vue from 'vue';
export const EventBus = new Vue();

发送事件:

import { EventBus } from './event-bus.js';
EventBus.$emit('custom-event', { data: '跨组件数据' });

接收事件:

import { EventBus } from './event-bus.js';
EventBus.$on('custom-event', (data) => {
  console.log(data);
});

使用 provideinject

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

祖先组件:

export default {
  provide() {
    return {
      sharedData: '祖先提供的数据'
    }
  }
}

后代组件:

export default {
  inject: ['sharedData'],
  mounted() {
    console.log(this.sharedData); // 输出:祖先提供的数据
  }
}

注意事项

  • 简单父子通信优先使用 $emitprops
  • 跨层级或复杂场景建议使用 Vuex 或 Event Bus。
  • provide/inject 主要用于高阶插件/组件库开发,常规业务慎用。

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

相关文章

项目基于vue实现

项目基于vue实现

基于Vue实现项目的关键方法 搭建基础环境 安装Node.js和npm/yarn,确保开发环境具备运行Vue的能力。通过Vue CLI快速初始化项目结构,选择所需配置(如Babel、Router、Vu…

vue实现条件判断

vue实现条件判断

Vue 条件判断实现方法 Vue 提供了多种方式实现条件判断,可以根据不同场景选择合适的方式。 v-if / v-else-if / v-else 这是 Vue 中最常用的条件渲染指令,根据表达式…

vue实现简单的弹窗

vue实现简单的弹窗

使用 Vue 实现简单弹窗 组件基础结构 创建一个名为 Modal.vue 的组件文件,包含模板、脚本和样式部分: <template> <div class="modal-…

用vue实现滑动输入条

用vue实现滑动输入条

使用 Vue 实现滑动输入条 使用原生 HTML5 input range 实现 在 Vue 模板中直接使用 <input type="range">,通过 v-model 绑定数据:…

vue实现流程

vue实现流程

Vue 实现流程的基本步骤 安装 Vue.js 可以通过 CDN 引入或使用 npm/yarn 安装。 CDN 方式: <script src="https://cdn.jsdelivr…

vue实现主页

vue实现主页

Vue 实现主页的基本步骤 创建一个 Vue 主页通常涉及以下几个关键步骤,从项目初始化到页面布局和功能实现。 初始化 Vue 项目 使用 Vue CLI 或 Vite 初始化项目。Vue CLI…