美文网首页
[vue3进阶] 6.slot插槽3——作用域插槽

[vue3进阶] 6.slot插槽3——作用域插槽

作者: 林哥学前端 | 来源:发表于2021-09-28 15:24 被阅读0次

作用域插槽——又是一个抽象的名字,那我用简单的语言解释一下
当父组件里写的插槽的内容需要使用子组件里的数据时,这时候就要用作用域插槽这个功能
可能你还是没明白,不过没关系,咱们还是通过写一个小例子来学习

我们现在有一个子组件,叫heroList,顾名思义就是要显示一个英雄列表,
咱们快速的把它写出来,都是以前学过的内容

<template>
  <ul>
    <li v-for="item in list" :key="item">
      {{ item }}
    </li>
  </ul>
</template>

<script>
export default {
  data() {
    return {
      list: ['列昂纳多', '拉斐尔', '米开朗基罗', '多纳泰罗'],
    }
  },
}
</script>

<style></style>

然后在App.vue里面使用它

<hero-list></hero-list>

显示结果是


然后需求变复杂了,在使用这个组件时,需要把名字渲染到不同的标签里

    <li v-for="item in list" :key="item">
      <h2>{{item }}</h2>
    </li>

或者

    <li v-for="item in list" :key="item">
      <span>{{item }}</span>
    </li>

这时,我们想到可以把li里面写一个slot,然后里面的标签从父组件使用slot插入进来就可以了

    <li v-for="item in list" :key="item">
      <slot></slot>
    </li>

App.vue里面修改

    <hero-list>
      <h2></h2>
    </hero-list>

发现h2标签倒是有了,但是名字没了



因为根本没有在h2里面放内容啊

然后把item放进去

    <hero-list>
      <h2>{{item}}</h2>
    </hero-list>

发现仍然不行,因为item是heroList组件里面数据,在App.vue不能直接使用,即使是在slot里面
那vue还是提前准备好了这个问题的解决方案了,提供了在父组件中使用子组件数据的语法
先修改heroList子组件

    <li v-for="item in list" :key="item">
      <slot :heroName="item"></slot>
    </li>

给slot标签绑定了一个属性,名字叫做heroName,绑定的值就是item,
heroName这个名字是我们自己起的,你可以起你喜欢的名字,后面用时候对应上就行了,
item就是我们循环出来的英雄的名字了
第二步修改父组件App.vue

    <hero-list>
      <template v-slot="slotProps">
        <h2>{{ slotProps.heroName }}</h2>
      </template>
    </hero-list>

这里复杂一点,咱们一点一点解释
1.更上节课一样,我们的slot内容先用一个template标签包住
2.也是使用v-slot,它等于一个值slotProps,slotProps这个名字你也可以随你喜欢起,它表示一个对象,这个对象里存着子组件要在父组件里使用的数据,
3.slotProps这个对象里存放我们在子组件里定义的heroName这个值,把它绑定到h2中

这样列表就显示出来了


结合插槽名字使用

我们上面没有给子组件的slot起名字,使用时也没有名字

 <template v-slot="slotProps">

其实和

<template v-slot:default="slotProps">

是一样的

如果给slot起一个名,修改heroList

<slot :heroName="item" name="text"></slot>

那么在使用时,必须指定名字,修改App.vue

      <template v-slot:text="slotProps">
        <h2>{{ slotProps.heroName }}</h2>
      </template>

根据我们之前学习的简写,可以写成

      <template #text="slotProps">
        <h2>{{ slotProps.heroName }}</h2>
      </template>

插槽的内容就说这么多了,肯定有初学的小伙伴表示,插槽的语法这么多,记不住啊,
我还是要强调一下写法什么的不要死记,记不住也没关系,知道有这么个功能就行了,
等需要时,再到官网去查就行
还有像作用域插槽,在工作中用的地方并不多,
主要集中在表格、列表使用第三方ui库展示时,比如element-ui,到时候再去看官网例子也不晚

相关文章

  • [vue3进阶] 6.slot插槽3——作用域插槽

    作用域插槽——又是一个抽象的名字,那我用简单的语言解释一下当父组件里写的插槽的内容需要使用子组件里的数据时,这时候...

  • 18、Vue3 作用域插槽

    作用域插槽:让插槽内容能够访问子组件中,vue2中作用域插槽使用slot-scope,vue3中使用v-slot ...

  • vue----slot插槽

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

  • 2.插槽

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

  • vue3中的插槽

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

  • vue中slot插槽的使用

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

  • jsx中插槽的写法

    作用域插槽 scopedSlots: (2.6.0+) 一个暴露传入的作用域插槽的对象。也以函数形式暴露普通插槽。...

  • Vue中 的作用域插槽

    逻辑:父组件调用子组件的时候,给子组件传了一个插槽,这个插槽叫做作用域插槽,作用域插槽必须是template开头和...

  • Vue-使用插槽

    二。具名卡槽 作用域插槽:插槽循环时使用

  • slot 用法以及使用场景

    Vue的插槽slot,分为3种 匿名插槽 具名插槽 作用域插槽 前两种很好理解,无非就是子组件里定义一个slot占...

网友评论

      本文标题:[vue3进阶] 6.slot插槽3——作用域插槽

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