当前位置: 首页 > wzjs >正文

安康创宇网站建设杭州谷歌推广

安康创宇网站建设,杭州谷歌推广,吉林省城乡建设委员会网站,设计类专业哪个最好大白话Vue2和Vue3 组件通信,方式有哪些,都有什么区别? 咱们来聊聊 Vue2 和 Vue3 里组件通信的事儿,组件通信就像是不同部门之间传递消息,让各个组件能协同工作。下面分别说说它们的通信方式以及区别。 Vue2 组件通信方式 1. 父…

大白话Vue2和Vue3 组件通信,方式有哪些,都有什么区别?

咱们来聊聊 Vue2 和 Vue3 里组件通信的事儿,组件通信就像是不同部门之间传递消息,让各个组件能协同工作。下面分别说说它们的通信方式以及区别。

Vue2 组件通信方式

1. 父传子:props

这就像是领导给下属分配任务。父组件通过 props 把数据传递给子组件。父组件在使用子组件的标签上,用自定义属性来传递数据,子组件在 props 选项里声明要接收哪些数据。

例子

<!-- 父组件 -->
<template><ChildComponent :message="parentMessage" />
</template><script>
import ChildComponent from './ChildComponent.vue';
export default {components: {ChildComponent},data() {return {parentMessage: '这是来自父组件的消息'};}
};
</script><!-- 子组件 -->
<template><p>{{ message }}</p>
</template><script>
export default {props: ['message']
};
</script>
2. 子传父:$emit

这好比下属向领导汇报工作。子组件通过 $emit 触发一个自定义事件,父组件监听这个事件,当事件触发时,子组件可以把数据传递给父组件。

例子

<!-- 子组件 -->
<template><button @click="sendMessage">发送消息给父组件</button>
</template><script>
export default {methods: {sendMessage() {this.$emit('childEvent', '这是来自子组件的消息');}}
};
</script><!-- 父组件 -->
<template><ChildComponent @childEvent="handleChildEvent" />
</template><script>
import ChildComponent from './ChildComponent.vue';
export default {components: {ChildComponent},methods: {handleChildEvent(message) {console.log(message);}}
};
</script>
3. 非父子组件通信:事件总线(Event Bus)

这就像公司里有个公共的消息板,大家都可以在上面发消息和看消息。创建一个事件总线对象,组件可以通过它来触发事件和监听事件,从而实现非父子组件之间的通信。

例子

// event-bus.js
import Vue from 'vue';
export const eventBus = new Vue();// 发送消息的组件
import { eventBus } from './event-bus.js';
export default {methods: {sendMessage() {eventBus.$emit('messageEvent', '这是一条广播消息');}}
};// 接收消息的组件
import { eventBus } from './event-bus.js';
export default {created() {eventBus.$on('messageEvent', (message) => {console.log(message);});}
};
4. Vuex

这就像是公司有个大的资料室,所有组件都可以去那里拿资料和放资料。Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式。它采用集中式存储应用的所有组件的状态,并以相应的规则保证状态以一种可预测的方式发生变化。

Vue3 组件通信方式

1. 父传子:props

和 Vue2 类似,还是领导给下属分配任务。只不过在 Vue3 的组合式 API 里,接收 props 的方式有变化。

例子

<!-- 父组件 -->
<template><ChildComponent :message="parentMessage" />
</template><script setup>
import { ref } from 'vue';
import ChildComponent from './ChildComponent.vue';
const parentMessage = ref('这是来自父组件的消息');
</script><!-- 子组件 -->
<template><p>{{ message }}</p>
</template><script setup>
import { defineProps } from 'vue';
const props = defineProps({message: String
});
</script>
2. 子传父:defineEmits

也是下属向领导汇报工作,不过在 Vue3 里用 defineEmits 来定义可以触发的事件。

例子

<!-- 子组件 -->
<template><button @click="sendMessage">发送消息给父组件</button>
</template><script setup>
import { defineEmits } from 'vue';
const emit = defineEmits(['childEvent']);
const sendMessage = () => {emit('childEvent', '这是来自子组件的消息');
};
</script><!-- 父组件 -->
<template><ChildComponent @childEvent="handleChildEvent" />
</template><script setup>
import ChildComponent from './ChildComponent.vue';
const handleChildEvent = (message) => {console.log(message);
};
</script>
3. 非父子组件通信:provide/inject

这就像公司里有个资源共享库,上级组件提供资源,下级组件可以注入使用,不管隔了多少层。

例子

<!-- 上级组件 -->
<template><ChildComponent />
</template><script setup>
import { provide, ref } from 'vue';
const sharedData = ref('这是共享的数据');
provide('sharedData', sharedData);
</script><!-- 下级组件 -->
<template><p>{{ sharedData }}</p>
</template><script setup>
import { inject } from 'vue';
const sharedData = inject('sharedData');
</script>
4. Vuex 或 Pinia

Vuex 还是那个大资料室,而 Pinia 是 Vue3 推荐的新状态管理库,功能和 Vuex 类似,但使用起来更简单。

区别

语法差异

Vue3 引入了组合式 API,像 definePropsdefineEmits 这些新的语法来处理 props 和自定义事件,和 Vue2 的选项式 API 写法不同。

非父子组件通信方式侧重点

Vue2 常用事件总线,但是当项目变大时,事件总线管理起来会比较混乱。Vue3 更推荐使用 provide/inject,它的层级关系更清晰,而且能更好地和组合式 API 配合使用。

状态管理库

Vue3 除了可以继续用 Vuex,还推荐使用 Pinia,Pinia 更符合现代 JavaScript 的特性,代码更简洁,使用起来也更方便。

http://www.dtcms.com/wzjs/93795.html

相关文章:

  • 网上学设计哪个网站好搜索百度
  • 湖南省做网站的经典网络营销案例
  • 做简单的网站太原搜索排名提升
  • 建站公司怎么获客网络策划是做什么的
  • 盐城网络优化优秀网站seo报价
  • 网站建设托管百度学术官网入口
  • 南通企业建设网站电话关键词排名网站
  • 焦作网站建设哪家正规郑州网络推广
  • 自己做网站卖衣服廊坊快速优化排名
  • 衡阳市城市建设投资有限公司网站怎样推广app
  • wordpress私密页面郑州网站seo服务
  • 网站上的在线客服怎么做的竞价排名是按照什么来计费的
  • 网站内链设置搜索引擎竞价推广的优势
  • 三合一网站建设方案中国十大门户网站排行
  • 电脑做网站空间百度广告投放公司
  • 怎么避免网站开发后门网络营销公司网络推广
  • 多少钱可以做网站企业网站seo优化公司
  • 网站编排扬州网站seo
  • 网站建设seo合同书深圳搜狗seo
  • php网站cms什么是seo?
  • 免费wordpress cms主题搜索引擎广告优化
  • 中文网站模板html广告软文范例200字
  • 怎样在网上建网站做电商生意淘宝流量
  • 云主机 几个网站网站设计制作公司
  • 昆明有网站的公司佛山疫情最新消息
  • 成都网站建设 工作室网络推广搜索引擎
  • 建设银行网银网站厦门seo计费
  • 帮网贷做网站会判刑吗广告推广平台网站
  • 极简主义 网站人民日报最新消息
  • 网站建设流程图网站关键词免费优化