2022-06-13 vue组件通讯

方法一、props/$emit

父组件A通过props的方式向子组件B传递,B to A 通过在 B 组件中 $emit, A 组件中 v-on 的方式实现。

1.父组件向子组件传值

接下来我们通过一个例子,说明父组件如何向子组件传递值:在子组件Users.vue中如何获取父组件App.vue中的数据 users:["Henry","Bucky","Emily"]

子组件中定义props,父组件调用子组件时将props作为属性动态设置值;值的来源可以时父组件的data、props、computed

总结:父组件通过props向下传递数据给子组件。注:组件中的数据共有三种形式:data、props、computed

2.子组件向父组件传值(通过事件形式)

子组件中定义method,使用$emit触发父组件方法,this.$emit("titleChanged","子向父组件传值");//自定义事件  传递值“子向父组件传值”

父组件:<app-header v-on:titleChanged="updateTitle" ></app-header>// updateTitle($event)接受传递过来的文字

总结:子组件通过events给父组件发送消息,实际上就是子组件把自己的数据发送到父组件。

方法二、$emit/$on

这种方法通过一个空的Vue实例作为中央事件总线(事件中心),用它来触发事件和监听事件,巧妙而轻量地实现了任何组件间的通信,包括父子、兄弟、跨级。当我们的项目比较大时,可以选择更好的状态管理解决方案vuex。

$on 监听了自定义事件 data-a和data-b,因为有时不确定何时会触发事件,一般会在 mounted 或 created 钩子中来监听。

方法三、vuex

state、mutation、action、getter

这里需要注意的是:由于vuex里,我们保存的状态,都是数组,而localStorage只支持字符串,所以需要用JSON转换:

JSON.stringify(state.subscribeList);  // array -> string

JSON.parse(window.localStorage.getItem("subscribeList"));    // string -> array

方法四、$attrs/$listeners

多级组件嵌套需要传递数据时,通常使用的方法是通过vuex。但如果仅仅是传递数据,而不做中间处理,使用 vuex 处理,未免有点大材小用。为此Vue2.4 版本提供了另一种方法----$attrs/$listeners

$attrs表示没有继承数据的对象,格式为{属性名:属性值}。Vue2.4提供了$attrs , $listeners 来传递数据与事件,跨级组件之间的通讯变得更简单。

简单来说:$attrs与$listeners 是两个对象,$attrs 里存放的是父组件中绑定的非 Props 属性,$listeners里存放的是父组件中绑定的非原生事件

方法五、provide/inject

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 一、组件间通信的概念 开始之前,我们把组件间通信这个词进行拆分 组件 通信 都知道组件是vue最强大的功能之一,v...
    我王某不需要昵称阅读 3,940评论 0 3
  • Vue中组件通讯的方式有很多种,每一种应用的场景可能都有一些不一样,我们需要在合适的场景下选择合适的通讯方式。 父...
    泪滴在琴上阅读 3,762评论 1 8
  • 组件之间的通讯简述:父子组件的关系可以总结为 props 向下传递,事件event向上传递祖先组件和后代组件(跨多...
    简单tao的简单阅读 3,401评论 0 6
  • 1、props 父传子的属性,props 值可以是一个数组或对象; 2、$emit 子传父的方法 3、vuex v...
    alanwhy阅读 2,875评论 0 0
  • 面试题,比较简单的是 props,$emit Vuex(Vuex用来传值被认为与其“数据共享”的定位不太一样) $...
    绝尘kinoko阅读 1,508评论 0 0

友情链接更多精彩内容