毫无疑问,组件通信是Vue中非常重要的技术之一,它的出现能够使我们非常方便的在不同组件之间进行数据的传递,以达到数据交互的效果。所以,学习组件通信技术是非常有必要的,本文将总结Vue中关于组件通信的八种方式,帮助大家在使用Vue的过程中更加得心应手! 如果文中有不对、疑惑的地方,欢迎在评论区留言指正
毫无疑问,组件通信是Vue中非常重要的技术之一,它的出现能够使我们非常方便的在不同组件之间进行数据的传递,以达到数据交互的效果。所以,学习组件通信技术是非常有必要的,本文将总结Vue中关于组件通信的八种方式,帮助大家在使用Vue的过程中更加得心应手!
如果文中有不对、疑惑的地方,欢迎在评论区留言指正!!
在开始之前我们需要明白什么是组件通信, 组件通信 可以拆分为两个部分:
都知道组件是
vue
最强大的功能之一,
vue
中每一个
.vue
文件我们都可以视之为一个组件,简单来说组件就是对UI结构的复用。
通信指的是发送者通过某种媒体以某种格式来传递信息到收信者以达到某个目的。广义上,任何信息的交通都是通信。而
组件间通信
即指组件(
.vue
)通过某种方式来传递信息以达到某个目的,举个栗子我们在使用
UI
框架中的
table
组件,可能会往
table
组件中传入某些数据,这个本质就形成了组件之间的通信
通信的本质是信息同步,共享。回到vue中,每个组件之间的都有独自的作用域,组件间的数据是无法共享的但实际开发工作中我们常常需要让组件之间共享数据,这也是组件通信的目的要让它们互相之间能进行通讯,这样才能实现数据间的交互,完成某种功能的开发。
组件间通信的分类可以分成以下
他们之间的关系如下图:
目前最常用是
props/$emit
和
vuex/pinia
,接下来是
provide/inject
,其他不建议使用;
实际项目中,简单父子组件传递采用
props/$emit
,涉及全局共享的数据一般采用
vuex/pinia
结合存储对象
localStorage/sessionStorage
使用。
用 props 传数据给子组件有两种方法,如下
方法一,setup() 方法写法
// Parent.vue 传送
// Child.vue 接收
方法二,setup 语法糖
// Parent.vue 传送
// Child.vue 接收
注意:
如果父组件是setup(),子组件setup 语法糖写法的话,是接收不到父组件里 data 的属性,只能接收到父组件里 setup 函数里传的属性。
如果父组件是setup 语法糖写法,子组件setup()方法写法,可以通过 props 接收到 data 和 setup 函数里的属性,但是子组件要是在 setup 里接收,同样只能接收到父组件中 setup 函数里的属性,接收不到 data 里的属性
官方也说了,既然用了 3,就不要写 2 了,所以不推荐setup()方法写法。下面的例子,一律只用语法糖的写法。
// Child.vue 派发
// 写法一
// Parent.vue 响应
父组件获取子组件的属性或者调用子组件方法。
// Child.vue
// Parent.vue 注意 ref="comp"
按钮
attrs
:包含父作用域里除 class 和 style 除外的非 props
属性集合
。
// Parent.vue 传送
// Child.vue 接收
可以支持多个数据双向绑定
// Parent.vue
// Child.vue
按钮
provide / inject 为依赖注入
provide
:可以让我们指定想要提供给后代组件的数据或
inject
:在任何后代组件中接收想要添加在这个组件上的数据,不管组件嵌套多深都可以直接拿来用
// Parent.vue
// Child.vue
// store/index.js
import { createStore } from "vuex"
export default createStore({
state:{ count: 1 },
getters:{
getCount: state => state.count
},
mutations:{
add(state){
state.count++
}
}
})
// main.js
import { createApp } from "vue"
import App from "./App.vue"
import store from "./store"
createApp(App).use(store).mount("#app")
// Page.vue
// 方法一 直接使用
{{ $store.state.count }}
按钮
// 方法二 获取
Vue3 中没有了 EventBus 跨组件通信,但是现在有了一个替代的方案 mitt.js,原理还是 EventBus。
先安装
npm i mitt -S
然后像以前封装 bus 一样,封装一下
mitt.js
import mitt from 'mitt'
const mitt = mitt()
export default mitt
然后两个组件之间通信的使用
// 组件 A
// 组件 B
vue.js: https://cn.vuejs.org/
vuex是什么: https://vuex.vuejs.org/zh/
工作中要使用Git,看这篇文章就够了: http://www.guosisoft.com/article/detail/410508049313861
企业数字化转型如何做?看过来: http://www.guosisoft.com/article/detail/408745545576517
Vue2.x 组件通信方式: http://www.guosisoft.com/article/detail/411234710110277
【保姆级教程】Vue项目调试技巧: http://www.guosisoft.com/article/detail/430312211521605
Vue 前端开发团队风格指南(史上最全): http://www.guosisoft.com/article/detail/415491255230533
国思RDIF低代码快速开发平台(支持vue2、vue3): http://www.guosisoft.com/article/detail/557095625134149
如果本文对你有一点点帮助,点个赞支持一下吧,你的每一个【赞】都是我创作的最大动力 _
更多技术文章请往:
http://www.guosisoft.com/article
http://www.rdiframework.net/article
大家一起共同交流和进步呀!!
真实飞行员模拟 中文版 1.0.4 91.17 MB
下载
湘ICP备2022002427号-10湘公网安备:43070202000427号
© 2013~2019 haote.com 好特网