VUE学习笔记:插槽详解

      刚开始看Vue官方文档的时候对插槽不是很理解,其实通俗点来讲,插槽就是在自定义组件中预留一个位置,这个位置的内容可以由使用组件的人来定义,具有高度的灵活性。

1、使用场景

      先来看看插槽的使用场景,否则可能连学习的欲望都没有了。插槽还是很重要的,即使不去定义,也要学会使用。

      下面这个图中使用了Vant中的NavBar组件,该组件用于手机端标题展示,默认的组件展示的只有标题和返回按钮,但是在有些情况下,我们可能需要在标题栏中放一个增加或查询按钮,这个时候就需要利用插槽来让用户自己定义区域中的内容。该组件的封装者将该标题组件划分成三个区域,分别是“左、中、右”,每个位置都放了一个插槽,并且给出默认内容。这样一来,用户除了可以采用默认的方式使用该组件,也可以自己定义插槽区域的内容,极大的提高了组件的灵活性。

2、插槽的基本用法

      定义组件时,在需要由用户自定义的区域使用<slot></slot>占位,使用组件时,在组件的标签之间通过<template></template>定义要往插槽中填充的内容。示例代码:

//定义一个组件Box
<template>
    <div>
        <div>这是一个定义了插槽的组件</div>
        <slot></slot>  //通过slot定义了一个插槽
        <div>组件其它内容</div>
    </div>
</template>

//使用上面的组件
<Box>
    <template>
        <div>插槽中展示的内容</div>
    </template>
</Box>

 ​

       如果在定义组件时没有使用<slot></slot>点位,即使在使用组件时在组件标签之间定义了内容,也会被忽略。

3、后备内容

       此处所说的后备内容是官方文档里面的叫法,实际上就是指插槽的默认值。在定义组件时,可以在<slot><slot>之间给出插槽的默认内容,也就是说当使用插槽时如果没有在组件标签内定义插槽的内容,则默认内容生效,否则默认内容不生效。例如:

//定义一个组件Box
<template>
    <div>
        <div>这是一个定义了插槽的组件</div>
        <slot>
            <div>这是插槽的默认内容</div>
        </slot>  //通过slot定义了一个插槽,并在插槽中给出了默认值
        <div>组件其它内容</div>
    </div>
</template>

 使用方式1:
<Box>
    <template>
        <div>插槽中展示的内容</div>
    </template>
</Box>

此时页面呈现的内容为:

 使用方式2:
<Box></Box>

此时页面呈现的内容为:

 

4、具名插槽

       每个插槽都有一个名字,当一个组件中只有一个插槽时,我们可以不用指定插槽的名称,此时插槽的名称为:default。如果一个组件中有多个插槽,我们必须为每个插槽制定名称,否则无法向插槽填充对应的内容。

在组件定义时为solt制定name标签,使用组件时,通过v-slot:‘组件名称’,制定插入到哪个插槽。v-slot必须使用在template标签,v-slot的简写形式为#。示例:

 5、作用域插槽

      定义插槽时可向<slot></slot>中添加属性,使用组件时可以接收到该属性值,示例:

//定义一个组件Box
<template>
    <div>
        <slot name='left' msg='消息内容'> //为slot标签添加属性,属性名称可以自定义
        </slot> 
    </div>
</template>


//使用组件
<Box>
    <template #left='obj'>
        <div>插槽内容</div>
    </template>
</Box>

       上面代码中,定义组件时为slot增加了name和msg属性,name为slot的名称,msg为自定义属性。使用组件时template标签中有一个指令:#left='obj',其中#left是:v-slot:left的缩写,obj中包含了msg属性值,使用时可以通过obj.msg获取传过来的消息内容。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值