当前位置:首页 > 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 集中管理状态。

vue实现发送值接受值

安装 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

vue实现发送值接受值

// 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>

后代组件注入数据

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

标签: vue
分享给朋友:

相关文章

vue实现密码

vue实现密码

Vue 密码输入组件实现 基础密码输入框实现 使用 Vue 的 v-model 指令绑定数据,并通过 type="password" 设置输入类型为密码: <template> &…

vue实现grid

vue实现grid

Vue 实现 Grid 布局的方法 使用 CSS Grid 布局 Vue 可以结合 CSS Grid 布局实现灵活的网格系统。CSS Grid 是现代浏览器原生支持的布局方案,无需额外依赖库。 &l…

实现vue table

实现vue table

Vue 表格实现方法 基础表格实现 使用 Vue 的 v-for 指令可以快速渲染表格数据。在模板中定义表格结构,通过数据绑定动态生成行和列。 <template> <tabl…

vue环境实现

vue环境实现

Vue 环境搭建 安装 Node.js 和 npm Node.js 是运行 Vue 的基础环境,npm 是包管理工具。从 Node.js 官网 下载并安装最新稳定版本。安装完成后,在终端运行以下命令验…

vue 实现分屏

vue 实现分屏

Vue 实现分屏的方法 使用 CSS Flexbox 或 Grid 布局 通过 CSS Flexbox 或 Grid 布局可以轻松实现分屏效果。在 Vue 组件中定义两个或多个区域,并使用 CSS 控…

vue实现尺子

vue实现尺子

Vue 实现尺子组件 实现一个尺子组件可以通过 Canvas 或纯 CSS 完成。以下是两种常见实现方式: 使用 Canvas 绘制尺子 通过 Canvas 动态绘制刻度线和数字,适合需要高精度或动…