当前位置:首页 > VUE

vue实现发送值接受值

2026-01-07 05:56:06VUE

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']
};
</script>

子组件向父组件传值($emit)

子组件通过 $emit 触发自定义事件,父组件通过 v-on 或简写 @ 监听事件并接收数据。

子组件代码:

<template>
  <button @click="sendMessage">Send Message</button>
</template>

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

父组件代码:

<template>
  <ChildComponent @message-from-child="handleMessage" />
</template>

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

export default {
  components: { ChildComponent },
  methods: {
    handleMessage(msg) {
      console.log(msg); // 输出: Hello from child
    }
  }
};
</script>

Vue 实现兄弟组件传值

通过共同的父组件中转

兄弟组件之间可以通过共同的父组件作为中介传递数据。子组件A通过 $emit 向父组件发送数据,父组件再通过 props 传递给子组件B。

使用事件总线(Event Bus)

vue实现发送值接受值

创建一个全局事件总线,用于兄弟组件之间的通信。

创建事件总线:

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

组件A发送事件:

<template>
  <button @click="sendMessage">Send Message</button>
</template>

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

export default {
  methods: {
    sendMessage() {
      EventBus.$emit('message-from-a', 'Hello from A');
    }
  }
};
</script>

组件B接收事件:

<template>
  <div>{{ message }}</div>
</template>

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

export default {
  data() {
    return {
      message: ''
    };
  },
  created() {
    EventBus.$on('message-from-a', (msg) => {
      this.message = msg;
    });
  }
};
</script>

Vuex 状态管理

对于大型应用,可以使用 Vuex 进行全局状态管理。

安装 Vuex:

vue实现发送值接受值

npm install vuex --save

创建 store:

// store.js
import Vue from 'vue';
import Vuex from 'vuex';

Vue.use(Vuex);

export default new Vuex.Store({
  state: {
    message: ''
  },
  mutations: {
    setMessage(state, payload) {
      state.message = payload;
    }
  },
  actions: {
    updateMessage({ commit }, payload) {
      commit('setMessage', payload);
    }
  },
  getters: {
    getMessage: state => state.message
  }
});

组件A提交 mutation:

<template>
  <button @click="sendMessage">Send Message</button>
</template>

<script>
export default {
  methods: {
    sendMessage() {
      this.$store.commit('setMessage', 'Hello from Vuex');
    }
  }
};
</script>

组件B获取 state:

<template>
  <div>{{ message }}</div>
</template>

<script>
export default {
  computed: {
    message() {
      return this.$store.state.message;
    }
  }
};
</script>

provide/inject 跨层级传值

对于深层嵌套的组件,可以使用 provideinject 进行传值。

祖先组件:

<template>
  <ChildComponent />
</template>

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

后代组件:

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

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

标签: vue
分享给朋友:

相关文章

vue实现简单的弹窗

vue实现简单的弹窗

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

vue实现按钮组轮换

vue实现按钮组轮换

实现按钮组轮换的方法 在Vue中实现按钮组轮换效果可以通过动态绑定类和事件处理来完成。以下是一种常见的实现方式: 模板部分 <template> <div class="bu…

vue路由实现内部切换

vue路由实现内部切换

Vue 路由实现内部切换的方法 Vue Router 是 Vue.js 官方的路由管理器,用于实现单页应用(SPA)的页面切换。以下是几种常见的内部路由切换方式: 使用 <router-li…

vue公共列表的实现

vue公共列表的实现

实现 Vue 公共列表组件 公共列表组件通常用于展示重复结构的数据,例如商品列表、用户列表等。以下是一个典型的实现方式: 基础实现 创建可复用的列表组件 List.vue: <templ…

vue手写签名如何实现

vue手写签名如何实现

实现手写签名的基本思路 在Vue中实现手写签名功能,通常需要借助HTML5的Canvas API来捕获用户的绘制操作。核心流程包括初始化画布、监听触摸/鼠标事件、记录轨迹以及生成签名图片。 安装依…

vue设计与实现下载

vue设计与实现下载

vue设计与实现电子书下载 《Vue.js设计与实现》是一本深入解析Vue.js框架原理的书籍,由霍春阳(HcySunYang)撰写。以下是获取该资源的常见途径: 正版购买渠道 京东、当当、天…