美文网首页vue大杂烩
Vue3 属性透传 $attrs 与 插槽透传 $slots

Vue3 属性透传 $attrs 与 插槽透传 $slots

作者: narcissus灬 | 来源:发表于2022-07-07 16:56 被阅读0次

当我们要复写各类 UI 组件的时候,为了保证UI组件的参数与插槽都能使用,且不用重复定义,我们可以通过属性透传插槽透传来实现

vue $slots 传送门

vue $attrs 传送门

属性透传 $attrs

$attrs 一个包含了组件所有透传 attribute 的对象(不包含已定义的 props)。

透传 Attribute 是一些由父组件传入的 attribute事件处理器,且没有在此子组件中声明为一个 prop要抛出的事件

默认情况下,若是单一根节点组件,$attrs 中的所有 property 都是直接自动继承自组件的根元素。而多根节点组件则不会如此,同时你也可以通过配置 inheritAttrs 选项来显式地关闭该行为。

实现属性透传

// 自定义的 MyButton
<el-button v-bind="$attrs"></el-button>
// 其他组件调用
<MyButton type="primary">按钮<MyButton>
/**
 * type="primary" 将会通过 v-bind="$attrs" 透传给 el-button 组件
 */

插槽透传 $slots

$slots 一个表示父组件所传入插槽的对象。

通常用于手写渲染函数,但也可用于检测是否存在插槽。

每一个插槽都在 this.$slots 上暴露为一个函数,返回一个 vnode 数组,同时 key 名对应着插槽名。默认插槽暴露为 this.$slots.default

如果插槽是一个作用域插槽,传递给该插槽函数的参数可以作为插槽的 prop 提供给插槽。

实现插槽透传

// 自定义组件 MyButton
<el-button v-bind="$attrs">
  <!-- 通过便利实现插槽透传 -->
  <template v-for="(item, key, index) in $slots" :key="index" v-slot:[key]>
    <slot :name="key"></slot>
  </template>
</el-button>
// 其他组件调用
<MyButton type="primary">
  <el-icon><Back /></el-icon>
<MyButton>

相关文章

  • Vue3 属性透传 $attrs 与 插槽透传 $slots

    当我们要复写各类 UI 组件的时候,为了保证UI组件的参数与插槽都能使用,且不用重复定义,我们可以通过属性透传与插...

  • vue属性透传

    通过 v-bind="$props" 以及v-bind="$attrs" 实现属性透传 很多时候,我们会写一些嵌套...

  • Js 学习笔记

    Vue组件透传 $attrs包含了父组件传递的所有属性,通过v-bind可以将父组件所有属性绑定到子组件 $lis...

  • Vue 技巧

    1.通过 v-bind="attrs" 实现属性透传 很多时候,我们会写一些嵌套组件, 比如 A 的子组件是 B,...

  • 数据透传最基础的东西,看完秒懂

    什么是数据透传?透传是指与传输网络的介质、调制解调方式、传输方式、传输协议无关的一种数据传送方式。数据透传即透明传...

  • 透传

    透传,即透明传输(pass-through),指的是在通讯中不管传输的业务内容如何,只负责将传输的内容由源地址传输...

  • 透传

    https://www.amazon.cn/dp/B07WKNQ8JThttps://www.amazon.cn/...

  • 蓝牙透传——介绍蓝牙最简单、最常见的通讯方式

    说到低功耗蓝牙模块,少不了要说说低功耗蓝牙模块中最简单、最常见的通讯方式——透传。透传也叫串口透传,就是透明传输的...

  • 3、vux-XHeader

    props 属性 slots 插槽 events 事件 methods 方法 1、import {XHeader}...

  • mui 透传

    mui 构建的app支持用个推的方式推送通知消息到手机app里,因为时间有限,所以不进行总结梳理,相关链接见下: ...

网友评论

    本文标题:Vue3 属性透传 $attrs 与 插槽透传 $slots

    本文链接:https://www.haomeiwen.com/subject/kpayvrtx.html