vue 插槽(slot)v-slot 使用

7 篇文章 0 订阅
6 篇文章 0 订阅
本文详细介绍了Vue.js中的插槽概念,包括其作为内容分发的API,以及如何在父子组件间使用插槽进行内容填充。通过实例展示了如何在子组件中定义插槽并在父组件中使用,以及2.6.0版本后的v-slot新语法,包括具名插槽的缩写形式。此外,还探讨了多个插槽的使用场景,帮助开发者更好地理解和应用Vue的插槽特性。
摘要由CSDN通过智能技术生成

插槽是什么?

官方解释 插槽就是Vue实现的一套内容分发的API,将元素作为承载分发内容的出口。
通俗解释 插槽就是子组件中的提供给父组件使用的一个占位符,用 表示,父组件可以在这个占位符中填充任何模板代码,如 HTML、组件等,填充的内容会替换子组件的标签。简单理解就是子组件中留下个“坑”,父组件可以使用指定内容来补“坑”。

基本用法

现在,有两个组件,A与B,分别如下:
A.vue

<template>
  <div>
    <p>我是A组件</p>
  </div>
</template>
 
<script>
export default {
  name:'A',
  data(){
    return {
 
    }
  }
}
</script>

B.vue

<template>
  <div>
    <p>我是B组件</p>
  </div>
</template>
 
<script>
export default {
  name:'B',
  data(){
    return {
 
    }
  }
}
</script>

将B组件引入A组件里面(此时B为A的子组件)

<template>
  <div>
    <p>我是A组件</p>
    <B><B/>
  </div>
</template>
 
<script>
import B from './B.vue'    //引入B组件
export default {
  name:'A',
  components:{      //注册B组件
    B
  },
  data(){
    return {
 
    }
  }
}
</script>

在B组件里面使用插槽(slot)

<template>
  <div>
    <p>我是B组件</p>
    <slot></slot>     //插槽的使用方式
  </div>
</template>
 
<script>
export default {
  name:'B',
  data(){
    return {
 
    }
  }
}
</script>

修改A组件里面的代码

<template>
  <div>
    <p>我是A组件</p>
    <B>  
      验证插槽是否生效      //用B组件标签包裹内容,验证slot
    </B>
  </div>
</template>
 
<script>
import B from './B.vue'
export default {
  name:'A',
  components:{
    B
  },
  data(){
    return {
 
    }
  }
}
</script>

此时B组件里面就有A组件定义的内容,这就是插槽的基本使用

插槽版本变化

在 2.6.0 中,我们为具名插槽和作用域插槽引入了一个新的统一的语法 (即 v-slot 指令)。它取代了 slot 和 slot-scope 这两个目前已被废弃但未被移除且仍在文档中的 attribute。新语法的由来可查阅这份 RFC。
有时我们需要多个插槽。例如对于一个带有如下模板的 组件:

<div class="container">
  <header>
    <!-- 我们希望把页头放这里 -->
  </header>
  <main>
    <!-- 我们希望把主要内容放这里 -->
  </main>
  <footer>
    <!-- 我们希望把页脚放这里 -->
  </footer>
</div>

在向具名插槽提供内容的时候,我们可以在一个 元素上使用 v-slot 指令,并以 v-slot 的参数的形式提供其名称:

<base-layout>
  <template v-slot:header>
    <h1>Here might be a page title</h1>
  </template>

  <p>A paragraph for the main content.</p>
  <p>And another one.</p>

  <template v-slot:footer>
    <p>Here's some contact info</p>
  </template>
</base-layout>

注意 v-slot 只能添加在 上 (只有一种例外情况),这一点和已经废弃的 slot attribute 不同。

具名插槽的缩写

跟 v-on 和 v-bind 一样,v-slot 也有缩写,即把参数之前的所有内容 (v-slot:) 替换为字符 #。例如 v-slot:header 可以被重写为 #header:

<base-layout>
  <template #header>
    <h1>Here might be a page title</h1>
  </template>

  <p>A paragraph for the main content.</p>
  <p>And another one.</p>

  <template #footer>
    <p>Here's some contact info</p>
  </template>
</base-layout>

记录一下简单的语法,详解还是得看官方api官方链接

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值