首页 > 其他分享 >vue组件间的通讯(10种方法)【重要】(待补充。。。)

vue组件间的通讯(10种方法)【重要】(待补充。。。)

时间:2022-11-07 17:32:31浏览次数:80  
标签:10 vue provide 通信 listeners 实例 inject 组件


1.props/$emit

props主要用于父组件传递数据给子组件,父==>子。

vue组件间的通讯(10种方法)【重要】(待补充。。。)_ide

Vue自定义事件

vue组件间的通讯(10种方法)【重要】(待补充。。。)_前端_02

父组件可以在使用子组件的地方直接用 v-on来监听子组件触发的事件 。即父组件中使用 v-on绑定自定义事件,然后在子组件中使用​​ $emit(eventName,data)​​​触发事件
仅仅用于父子组件传递,不适用于 三层及其以上

2.消息订阅与发布(PubSubJS库)

vue组件间的通讯(10种方法)【重要】(待补充。。。)_javascript_03

3.插槽slot

vue组件间的通讯(10种方法)【重要】(待补充。。。)_前端_04


vue组件间的通讯(10种方法)【重要】(待补充。。。)_javascript_05


vue组件间的通讯(10种方法)【重要】(待补充。。。)_vue.js_06


vue组件间的通讯(10种方法)【重要】(待补充。。。)_javascript_07

用于父组件向子组件传递"标签数据"。也即子组件先有一个"占位符", 等待父组件传入具体的标签,子组件在进行渲染。
因为传递的具体的标签是在父组件,所以操作也应该放在父组件中。也就是说应该在父组件运行好之后传入子组件,其所有的操作应该在父组件中进行。

4.vuex状态管理

vue组件间的通讯(10种方法)【重要】(待补充。。。)_前端_08


vue组件间的通讯(10种方法)【重要】(待补充。。。)_ide_09


vue组件间的通讯(10种方法)【重要】(待补充。。。)_前端_10

Vuex 核心

State:保存所有组件的共享状态
Getters:类似状态值的计算属性
Mutations:修改 State 中状态值的唯一方法,里面包含状态变化监听器和记录器
Actions:用于异步处理 State 中状态值,异步函数结束后调用Mutations
Modules:当一个 State 对象比较庞大时,可以将 State 分割成多个 Modules 模块。

5.全局事件总线

vue组件间的通讯(10种方法)【重要】(待补充。。。)_javascript_11

6. $parent / $children与 ref

ref / $refs

这种方式也是实现父子组件之间的通信
ref:这个属性用在子组件上,它的用用就指向了子组件的实例,可以通过实例来访问组件的数据和方法

$parent / $children

使用$parent可以让组件访问父组件的实例(访问的是上一级父组件的属性和方法)。
使用 $children 可以让组件访问子组件的实例,但是, $children 并不能保证顺序,并且访问的数据也不是响应式的。

7. 依赖注入(provide / inject)

这种方式就是vue中依赖注入,该方法用于 父子组件之间 的通信。当然这里所说的父子不一定是真正的父子,也可以是祖孙组件,在层数很深的情况下,可以使用这种方式来进行传值。就不用一层一层的传递数据了。
provide和inject是vue提供的两个钩子,和data、methods是同级的。并且provide的书写形式和data一样。
provide 钩子用来发送数据或方法。
inject钩子用来接收数据或方法

8. $attrs / $listeners

$attrs / $listeners 都是 vue 实例的 property。使用 $attrs / $listeners,实现父组件传递数据给子/孙组件。

$attrs:

包含了父作用域中不被 prop 所识别 (且获取) 的特性绑定 (class 和 style 除外)。当一个组件没有声明任何 prop 时,这里会包含所有父作用域的绑定 (class 和 style 除外),并且可以通过 v-bind=“$attrs” 传入内部组件。通常配合 interitAttrs 选项一起使用。

$listeners:

包含了父作用域中的 (不含 .native 修饰器的) v-on 事件监听器。它可以通过 v-on=“$listeners” 传入内部组件。

9.LocalStorage/SessionStorage

localStorage:存储持久数据,浏览器关闭后数据不丢失除非主动删除数据;
sessionStorage:数据在当前浏览器窗口关闭后自动删除

10.v-model语法糖(双向数据绑定)

父传子:

父组件:

在子组件里写v-model=“message”

子组件:

props:{
value:类型,
},
在data里调用这个value

子传父:

子组件:

函数绑定里写this.$emit(‘输入框,如input’,this.mymessage);

父组件:

v-model=“mymessage”

优点:使用时更加简洁
缺点:代码阅读难懂

总结

组件通信的几种方式

1、父子组件通信

2、兄弟组件通信

3、跨多层级组件通信

4、任意组件(vuex)

一、父与子孙通讯

  1. props/emit;——父组件通过​​props​​​传递数据给子组件,子组件通过​​$emit​​发送事件传递数据给父组件(单向数据流)
  2. 插槽slot;
  3. ​$parent / $children​​​与 ​​ref​​​——​​$parent / $children​​​访问组件实例中的方法和数据; ​​$ref​​​放在组件上可以获取组件实例。通过 ref 属性给子组件设置一个名字。父组件通过​​$refs​​​组件名来获得子组件,子组件通过 ​​$parent ​​获得父组件,这样也可以实现通信
  4. ​v-model​​——语法糖(双向数据绑定)

二、跨越层级通信

  1. ​provide / inject​​​——使用​​ provide/inject​​​,在父组件中通过 ​​provide​​​提供变量,在子组件中通过​​inject​​​来将变量注入到组件中。不论子组件有多深,只要调用了 ​​inject ​​​那么就可以注入 ​​provide​​中的数据【无响应性且只能单向通信(父传子)】
  2. ​ $attrs / $listeners​​——具有响应性且可以双向通信

三、任意组件通讯

  1. 消息订阅与发布​​pubsub​​库
  2. ​vuex​​​状态管理——​​vuex​​ 的思想就是将这一些公共的数据抽离出来,将它作为一个全局的变量来管理,然后其他组件就可以对这个公共数据进行读写操作,这样达到了解耦的目的
  3. 全局事件总线​​bus​​​——利用​​eventBus​​​总线实现,(实际上就是新建一个​​vue​​​实例,用​​eventBus.$emit​​​替代​​this.$emit​​​,一样用​​v-on​​监听事件变化)【使用 eventBus 的方法,它的本质是通过创建一个空的 Vue 实例来作为消息传递的对象,通信的组件引入这个实例,通信的组件通过在这个实例上监听和触发事件,来实现消息的传递。】
  4. LocalStorage/SessionStorage本地存储

参考

  1. ​https://www.bilibili.com/video/BV1Zy4y1K7SH?p=96&spm_id_from=pageDriver​

标签:10,vue,provide,通信,listeners,实例,inject,组件
From: https://blog.51cto.com/u_15867142/5830156

相关文章

  • 小程序缺省页公共组件
    <!--components/nodata/nodata.wxml--><!--其中的图片nodata.img从UI图获取--><viewclass="nodata"style="margin-top:{{marTop}}rpx;"><imagesrc="/images/noda......
  • 【前端开发】如何将vue组件转成自定义指令使用,(在自定义指令中使用element ui组件或常
    //导入组件importVuefrom'vue'importXxTipsfrom'packages/basic/xx-tips/src/XxTips.vue'//自定义指令Vue.directive('tip',{bind(el,binding){el.......
  • SB20100LFCT-ASEMI半塑封肖特基二极管SB20100LFCT
    编辑-ZSB20100LFCT在ITO-220AB封装里采用的2个芯片,其尺寸都是82MIL,是一款半塑封肖特基二极管。SB20100LFCT的浪涌电流Ifsm为180A,漏电流(Ir)为6uA,其工作时耐温度范围为-65~......
  • 展锐T618/T610安卓4G核心板/开发板/方案定制
    XY610(以UMS512为主芯片)是一款基于UNISOC平台、工业级高性能、可运行安卓操作系统的4G智能模块,支持TDD-LTE/LTE-FDD/WCDMA/TD-SCDMA/CDMA2000/GSM等多种制式;支持WiFi80......
  • Vue-Router
    Vue-Router目录Vue-Router1.路由的安装与基本使用2.带参的动态路由3.页面导航4.关于路由的命名5.关于路由传参null6.路由导航守卫7.动态路由1.路由的安装与基本使用......
  • Vue中做table分页
    <template> <divclass="wrap">  <!--<el-card>-->   <el-table:data="tableData"borderstripestyle="width:100%">    <el-table-column......
  • 【2022-10-31】连岳摘抄
    23:59如人走路一般,走得一段,方认得一段;走到岐路处,有疑便问,问了又走,方渐能到得欲到之处。                         ......
  • vue-计算属性和监视属性的区别和使用方法
    转载于:https://blog.csdn.net/qq_38110274/article/details/121242203 作者:我是天之涯  一、总述computed和watch都是vue框架中的用于监听数据变化的属性。 二......
  • vuecli的项目结构
    src中为我们需要编写的资源assets中为公共资源如图片多媒体文件等components中为我们编写的子组件app为子组件入口mainjs为总入口文件......
  • APICloud实战案例:如何封装AVM组件?(以声网组件为例)
    AVM.js(Application-View-Model)是一个移动优先的高性能跨端JavaScript框架,支持一次编写多端渲染。它提供更趋近于原生的编程体验,通过简洁的模型来分离应用的用户界面、业......