vue组件通信(二)

本文详细介绍了Vue中组件间通信的多种方式,包括通过$root访问根实例属性,使用$attrs和$listeners传递父组件属性和事件,以及利用provide和inject进行跨级数据传递。$attrs和$listeners在Vue3中有了新的变化。同时,$dispatch和$broadcast在Vue2中已被废弃,但在一些UI框架中仍有应用。
摘要由CSDN通过智能技术生成

可用于祖孙组件间传值的

1.$root

vue子组件可以通过$root属性访问根实例的属性和方法 如果当前实例没有父实例 此实例将会是自己

2.$attrs/ $listener

$attrs

用法:

         1.在组件中输入this,$attrs就可以获取所有父组件传递的除了自己定义的props属性之外的所有属性  

          2. 如果要获取祖父组件传递的数据需要在父组件中使用v-bind绑定一个 $attrs 不绑定只能拿到父组件传递的值

特点:

          1.$attrs 是一个内置属性,指父组件 或祖先组件传递的、除了自己定义的 props 属性之外的所有属性。

           2. 如果子组件声明了$prop,$attrs中与$props相同的属性会被移除

           3. $props必须在组件中注册了props才能用拿到值,所以在嵌套层级比较深的组件中$attrs拿值更加便捷

$listener

 用法:

            1.$listeners 包含了作用在这个组件上所有的监听器,即父组件绑定的全部监听事件,通过 v-on="$listeners",可以将这些事件绑定给它自己的子组件。在组件中使用this.$listener获取父组件使用v-on传递的函数   直接使用$emit触发父组件或者祖先组件的监听事件

            2.如果要获取祖父组件传递的需要在父组件中使用v-on绑定一个 $listener

特点:

            1.$listeners是组件的内置属性,它的值是父组件(不含.native修饰器的) v-on事件监听器。

             2.组件可以通 过在自己的子组件上使用v-on=”$listeners”,进一步把值传给自己的子组件。如果子组件已经绑定$listener中同名的监听器,则两个监听器函数会以冒泡的方式先后执行。

               $listeners 对象在 Vue 3 中已被移除。事件监听器现在是 $attrs 的一部分

3.provide/injec

//父组件 
 // 父组件通过provide将自己的数据以对象形式传出去
  provide(){
    return {
      msg:'一条信息'
    }
  }
//子组件
// inject:["msg"], // 使用一个注入的值作为数据入口
  inject:{ //或者写成对象
    // 使用一个默认值使其变成可选项
    msg: { // 键名
      from: 'msg', // 来源
      default: '' // 默认值
    }
  }

通过provide与inject,可以把一个祖先组件指定的数据和方法,传递给其所有子孙组件中

         1.provide 和 inject 主要在开发高阶插件/组件库时使用.通过provide/inject可以轻松实现跨级访问父组件的数据,provide和inject是成对出现的.

          2.provide只需要将传递的值抛出,不需要知道使用哪一个子组件,子组件通过inject注入获取数据,也不需要知道父组件是谁,因此在封装组件库的时候很便利。

           3.provide:是一个对象,或者是一个返回对象的函数。里面呢就包含要给子孙后代的东西,也就是属性和属性值

           4. 祖父多层provide提供了很多数据,from属性指定取哪一个key;default指定默认值。

4.$dispatch /$broadcast

      在 Vue 1.0 中主要用来实现基于组件树结构的事件流通信 —— 通过向上或向下以冒泡的形式传递事件流,以实现嵌套父子组件的通信。但是由于其显功能缺陷,在 Vue 2.0 中就被移除了。虽然 Vue 官网已经不再支持使用 $dispatch 和 $broadcast 进行组件通信,但是在很多基于 Vue 的 UI 框架中都有对其的封装,包括 element-ui、iview 等等。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值