vue---slot插槽

作者: Year_h | 来源:发表于2020-06-22 17:47 被阅读0次

一、什么是插槽?

在进行组件化开发时,通常会遇到同一个功能,有共性的部分,也有不同的部分,此时我们就需要在子组件内,将不同的部分预留一个槽口即<slot></slot>,此时父组件在调用子组件时,就可以通过预留的槽口向子组件内插入不同的内容,实现不同内容的动态化展示,子组件内预留的槽口<slot></slot> 就是插槽。

二、插槽的作用

多个模块间具有相同的部分,又有各自不同的功能时,此时如果不想多次写重复的代码时,就可以将该多个模块抽取为一个公共组件,不同的部分设置插槽,父组件调用时通过插槽动态传递内容即可。下面是插槽应该的小例子,一个模块的标题是一样的,但是展示内容不一致。

三、插槽的应用

子组件

<template>
  <div>
    <p>listData</p>
    <slot>
      <ul>
        <li v-for="item in listData" :key="item.name">{{item.name}}</li>
      </ul>
    </slot>
  </div>
</template>

父组件

<template>
  <div>
    <Cslot>
      <h4>自己插入的插槽</h4>
    </Cslot>

    <Cslot></Cslot>
  </div>
</template>

四、具名插槽

有时我们需要多个插槽时,需要给子组件内的插槽定义一个名字,确保父组件在插入时,可以一 一对应。一个不带 name 的 <slot> 出口会带有隐含的名字“default”。

子组件

<template>
  <div>
    <p>listData</p>
    <slot>
      <ul>
        <li v-for="item in listData" :key="item.name">{{item.name}}</li>
      </ul>
    </slot>
    
    <slot name="centerSlot">
      <p>我是中间的slot</p>
    </slot>
  </div>
</template>

父组件 通过v-slot组件绑定需要对应的slot名称即可 即:v-slot:centerSlot 也可以简写为#centerSlot(适用于template模板)

<template>
  <div>
    <Cslot></Cslot>
    <Cslot>
     <template #centerSlot> 
      <div>具名插槽</div>
      <h4>自己插入的插槽</h4>
    </template>

    </Cslot>
  </div>
</template>

也可以不通过template 直接在元素上绑定需要插入的插槽名字,当与template同时存在时,template优先级最高

<template>
  <div>
    <Cslot></Cslot>
    <Cslot>
     <div slot='centerSlot'> 
          <div>具名插槽</div>
          <h4>自己插入的插槽</h4>
      </div>
    </Cslot>
  </div>
</template>

五、作用域插槽,(为了让插槽内容能够访问子组件中的数据)即父组件需要获取子组件的数据 重新修改渲染。

父组件有自己的作用域,只能访问自己作用域内的数据。

具体实现,子组件在slot上通过绑定属性将数据绑定上
父组件需要通过template模板 通过v-slot指令 获取对应slot传过来的数据(是一个对象:{{centerData:listData}},需要点传递时的属性[centerData]获取具体传过来的值[listData])。代码如下

子组件

<template>
  <div>
    <slot name="centerSlot" v-bind:centerData="listData">
      <p>我是中间的slot</p>
    </slot>
  </div>
</template>

父组件

<template>
  <div>
    <current-slot></current-slot>
    <current-slot>
      <template v-slot:centerSlot="slotProps">
        <span v-for="item in  slotProps.centerData" :key="item.name">---{{item.age}}---</span>
      </template>
    </current-slot>
  </div>
</template>

相关文章

  • vue---slot插槽

    一、什么是插槽? 在进行组件化开发时,通常会遇到同一个功能,有共性的部分,也有不同的部分,此时我们就需要在子组件内...

  • vue----slot插槽

    插槽分类 匿名插槽 具名插槽 作用域插槽

  • vue中slot插槽的使用

    插槽的种类:1、默认插槽、具名插槽、作用域插槽、解构插槽、动态插槽几种。转原文:https://www.jians...

  • vue3中的插槽

    插槽 默认插槽 具名插槽,v-slot可以简写为# 动态插槽 #[dynamicSlotName] 作用域插槽(...

  • 2.插槽

    匿名插槽 具名插槽 作用域插槽

  • 深入理解vue中的slot与slot-scope(自 2.6.0

    单个插槽 | 默认插槽 | 匿名插槽首先是单个插槽,单个插槽是vue的官方叫法,但是其实也可以叫它默认插槽,或者与...

  • vue 插槽 slot

    插槽使用 普通插槽 具名插槽 使用具名插槽 从插槽里面传值出来如何接收? 如: 如何判断某个插槽是否被使用 组件内...

  • vue插槽

    默认插槽(没有名字的插槽) 具名插槽(带名字的插槽) 老版 2.6.0以前 新版 作用域插槽(父组件可以获取子组件...

  • Vue总结4-插槽,Vuex,VueRouter

    1.插槽 1.1匿名插槽 52-Vue组件-匿名插槽 ...

  • 组件化高级

    插槽 什么是插槽 生活中有很多地方都有用到插槽,比如电脑的USB插槽,插板上的电源插槽,目的是让我们原来的设备具备...

网友评论

    本文标题:vue---slot插槽

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