vue(slot)插槽

插槽的关键字slot,默认情况下,组件中的模板会覆盖组件中的原始内容(即自定义标签对内部的内容会不显示),解决办法就是使用插槽。

组件的原始内容: 即在vue实例范围之内,因此可以调用实例的data和methods

插槽共分为3中:

插槽的结构:

匿名插槽:

具名插槽:

作用域插槽:

1. 匿名插槽

匿名插槽的作用: 保留组件中的所有原始标签内容,这种插槽被称为匿名插槽

直接在组件中写上slot标签对,就可以在根元素中的引用的组件中间显示所写的内容

//子组件child
vue.component('child',{
template:'<div>
            <p>hello</p>
            <slot>**(可在此定义默认内容)**</slot>
         </div>'
    })
 
//父组件
<div>
    <child>
        <p>world</p>//插入slot的内容
    </child>
</div>
 

 

2. 具名插槽

凡是具有name属性的slot标签,就被称为具名插槽即(在子组件中写,写的位置不同,在引用该模板的页面中显示的位置也会不一样)。
作用:

1. 在组件的原始内容的某个标签中,添加slot=top属性,指明该标签所对应的插槽的名称

2. 在组件模板中通过调用slot标签,兵设置name=top属性,会自动将对应的标签内容添加至当前slot标签所在的位置

注意:原始内容凡是具有slot属性的标签,内容只能添加至组件模板中具有相同值的name属性的slot标签中

匿名插槽的作用: 保留了原始数据,除了具名插槽标签中的内容,即凡是标签中具有slot=top的属性标签
 

//父组件
<body-container>
  <div slot='header'>
    <!-- 我们希望把页头放这里 -->
  </div>
  <div slot='footer'> 
    <!-- 我们希望把页脚放这里 -->
  </div>
</body-container>
 
//子组件
<div>
    <slot name='header'></slot>
    <div>context</div>
    <slot name='footer'></slot>
</div>

3. 作用域插槽

在组件的原始内容中,通过slot-scope属性接受作用域插槽传递的值,即obj={title:‘标题’,num:19}

作用域插槽:将组件模板中的数据传递给组件的原始内容

1. 在slot开始标签中,添加要传递的数据,避开name属性(具名插槽)

2. 在原始内容中通过slot-scope属性(其值是自定义的)接受传递的数据,即slot-scope=varName(本质是个对象,存储传递的数据,即数据会自动转换成键值对,存储在这个对象里,所以属性名对应属性名,属性值对应属性值)
 

//子组件
<div class="box" v-for="item of list" :key="item.id">
      <div class="box-title">
        <p>
          <span>{{item.deNo}}</span>
          <!--我们为每个item准备了一个插槽,将item对象作为一个插槽的prop传入-->
            <slot class="genre" v-bind:item="item"></slot>
        </p>
        <p>{{item.deDate}}</p>
      </div>
    </div>
//父组件
<div>
    <!--1.作用域插槽必须是template开头和结尾的内容-->
    <!--2.slot-scope="props"声明从子组件传递的数据都放在props里-->
    <!--3.加上v-if="props.item!=undefined"判断,防止取不到item的属性-->
    <template slot-scope="props" v-if="props.item!=undefined">
        <!--告诉子组件模板的信息是以<span>标签的形式-->
                <span class="genre">{{props.item.state}}</span>
    </template>
</div>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Vue中的插槽Slots)是一种在父组件中将子组件的内容进行分发的机制。通过插槽,我们可以在父组件中定义一些占位符,然后在子组件中填充具体的内容。 在Vue中,插槽有两种类型:具名插槽和默认插槽。 具名插槽允许我们在父组件中使用多个不同的插槽,并且可以根据需要进行分发和填充。我们可以使用`<slot>`元素和`name`属性来定义具名插槽。例如: ```html <!-- 父组件 --> <template> <div> <slot name="header"></slot> <slot></slot> <slot name="footer"></slot> </div> </template> <!-- 子组件 --> <template> <div> <slot name="header"> <!-- 默认插槽内容 --> <h1>默认标题</h1> </slot> <p>子组件内容</p> <slot name="footer"> <!-- 默认插槽内容 --> <p>默认页脚</p> </slot> </div> </template> ``` 在上面的例子中,父组件定义了三个插槽:`header`、默认插槽和`footer`。子组件可以根据需要填充这些插槽,并且如果没有提供相应的内容,那么会显示插槽中的默认内容。 默认插槽是没有名字的插槽,如果在父组件中没有定义具名插槽的话,子组件的内容会被分发到默认插槽中。 除了使用`<slot>`元素和`name`属性来定义插槽,我们还可以使用`<template>`元素和`v-slot`指令来定义和填充插槽。例如: ```html <!-- 父组件 --> <template> <div> <template v-slot:header> <!-- 插槽内容 --> </template> <!-- 默认插槽内容 --> <template v-slot:default> <!-- 插槽内容 --> </template> <template v-slot:footer> <!-- 插槽内容 --> </template> </div> </template> ``` 使用插槽可以使我们的组件更具灵活性,可以根据需要在父组件中定制子组件的部分内容。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值