浅谈:VUE 插槽 slot

使用场景

多个场景中,模块大同小异,使用模块做组件化,不同的位置,组件中使用插槽solt
分类解析标签备注
单个插槽当子组件模板只有一个没有属性的插槽时,父组件传入的整个内容片段将插入到插槽所在的 DOM 位置,并替换掉插槽标签本身。除非子组件模板包含至少一个 插口,否则父组件的内容将会被丢弃。slot标签是没有name属性去标记的
具名插槽 元素可以用一个特殊的特性 name 来进一步配置如何分发内容。多个插槽可以有不同的名字。具名插槽将匹配内容片段中有对应 slot 特性的元素。仍然可以有一个匿名插槽,它是默认插槽,作为找不到匹配的内容片段的备用插槽。如果没有默认插槽,这些找不到匹配的内容片段将被抛弃。主要是根据name插入对应的slot标签内
作用域插槽让插槽内容能够访问子组件中才有的数据,将 父组件数据作为 元素的一个特性绑定上去;绑定在 元素上的特性被称为插槽 prop。现在在父级作用域中,我们可以给 v-slot 带一个值来定义我们提供的插槽 prop 的名字类型使用template重渲染数据自vue 2.6.0 起有所更新。已废弃的使用 slot-scope 特性。

代码段

单个插槽

//子组件

<div>
  <h2>我是子组件的标题</h2>
  <slot>
    只有在没有要分发的内容时才会显示。
  </slot>
</div>

//父组件 

<div>
  <h1>我是父组件的标题</h1>
  <my-component>
    <p>这是一些初始内容</p>
    <p>这是更多的初始内容</p>
  </my-component>
</div>

//渲染结果

<div>
  <h1>我是父组件的标题</h1>
  <div>
    <h2>我是子组件的标题</h2>
    <p>这是一些初始内容</p>    //插入两个p标签内容, 子组件的默认内容被覆盖
    <p>这是更多的初始内容</p>
  </div>
</div>

具名插槽

//子组件
<div class="container">
  <header>
    <slot name="header"></slot>
  </header>
  <main>
    <slot></slot>
  </main>
  <footer>
    <slot name="footer"></slot>
  </footer>
</div>

//父组件
<app-layout>
  <h1 slot="header">这里可能是一个页面标题</h1>

  <p>主要内容的一个段落。</p>
  <p>另一个主要段落。</p>

  <p slot="footer">这里有一些联系信息</p>
</app-layout>

//渲染结果

<div class="container">
  <header>
    <h1>这里可能是一个页面标题</h1>
  </header>
  <main>
    <p>主要内容的一个段落。</p>
    <p>另一个主要段落。</p>
  </main>
  <footer>
    <p>这里有一些联系信息</p>
  </footer>
 </div>
 //根据slot 的name属性,插入对应slot

作用域插槽

//子组件
<span>
  <slot>{{ user.lastName }}</slot>
</span>

//父组件
<comp-user>
  {{ user.firstName }}
</comp-user>
//从代码来看,和单个插槽没什么区别,notice:单个插槽直接插入片段,没有变量,here:user,所以不会正常显示
//修正代码:
//子组件
<span>
  <slot v-bind:user="user">
    {{ user.lastName }}
  </slot>
</span>

//父组件
<comp-user>
  <template v-slot:default="slotProps">
    {{ slotProps.user.firstName }}
  </template>
</comp-user>
//desc:父组件控制重新显示子组件的属性值

参考资料:https://cn.vuejs.org/v2/guide/components-slots.html
https://www.jianshu.com/p/31674b727954

加入我的技术群,一起学习

707196135
在这里插入图片描述

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值