当前位置:首页 > VUE

vue实现发送值接受值

2026-01-12 07:12:03VUE

Vue 实现父子组件传值

父组件向子组件传值(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 Message</button>
</template>

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

父组件代码示例:

<template>
  <ChildComponent @message-sent="handleMessage" />
  <div>{{ receivedMessage }}</div>
</template>

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

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

使用 Vuex 进行状态管理

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

安装 Vuex

npm install vuex

创建 Store

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 }, message) {
      commit('setMessage', message);
    }
  }
});

组件中使用 Vuex

<template>
  <div>
    <button @click="updateMessage('New Message')">Update Message</button>
    <div>{{ sharedMessage }}</div>
  </div>
</template>

<script>
import { mapState, mapActions } from 'vuex';

export default {
  computed: {
    ...mapState(['sharedMessage'])
  },
  methods: {
    ...mapActions(['updateMessage'])
  }
};
</script>

使用 Event Bus 进行非父子组件通信

对于没有直接关系的组件,可以创建一个 Event Bus 来实现通信。

创建 Event Bus

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

发送事件

import { EventBus } from './event-bus.js';

EventBus.$emit('message-event', 'Hello from Component A');

接收事件

import { EventBus } from './event-bus.js';

EventBus.$on('message-event', message => {
  console.log(message);
});

使用 provide/inject 进行深层组件传值

对于深层嵌套的组件,可以使用 provideinject 来传递数据。

祖先组件提供数据

<script>
export default {
  provide() {
    return {
      providedMessage: 'Message from Ancestor'
    };
  }
};
</script>

后代组件注入数据

vue实现发送值接受值

<script>
export default {
  inject: ['providedMessage'],
  created() {
    console.log(this.providedMessage);
  }
};
</script>

标签: vue
分享给朋友:

相关文章

vue实现拼音搜索

vue实现拼音搜索

实现拼音搜索的基本思路 拼音搜索的核心是将中文转换为拼音,并在用户输入拼音时匹配对应的中文内容。Vue中可以通过集成拼音转换库(如pinyin或pinyin-pro)实现这一功能。 安装拼音转换库…

vue实现导航栏切图

vue实现导航栏切图

Vue 实现导航栏切图 使用 Vue Router 实现基础导航 在 Vue 项目中,可以通过 Vue Router 实现导航栏的路由切换。创建一个导航栏组件,并在其中使用 <router-li…

vue实现https

vue实现https

Vue 中实现 HTTPS 的步骤 在 Vue 项目中实现 HTTPS 主要涉及开发环境配置和生产环境部署。以下是具体方法: 开发环境配置(Vue CLI 或 Vite) 使用 mkcert 生成…

vue vnode实现

vue vnode实现

Vue VNode 实现原理 VNode(Virtual Node)是 Vue 的核心概念之一,用于描述真实 DOM 的轻量级虚拟表示。VNode 的实现涉及以下关键点: VNode 的基本结构 V…

vue实现打印

vue实现打印

使用Vue实现打印功能 在Vue项目中实现打印功能可以通过多种方式完成,以下是几种常见的方法: 方法一:使用window.print() 这种方法适用于打印整个页面或特定区域的内容。 // 在Vu…

vue实现流程转化

vue实现流程转化

Vue 实现流程转化 在 Vue 中实现流程转化通常涉及多个步骤,包括状态管理、组件通信和动态渲染。以下是几种常见的实现方法: 使用 Vuex 进行状态管理 Vuex 是 Vue 的官方状态管理库,…