组件插槽使用详解

x33g5p2x  于2021-11-16 转载在 其他  
字(2.1k)|赞(0)|评价(0)|浏览(190)

电脑的 usb 口,大家都非常熟悉,保留的 usb 口可以插入鼠标、键盘、U盘、音响、耳机等等,一个插口可以添加多个设备。我们的插槽也是这样,预留一个位置,我们使用的时候可以放入自己需要的内容。

一、插槽的作用

  • 插槽的目的是让原来的设备有更多的扩展性。
  • 组件最大的特点就是复用性,插槽能大大提高组件的复用性。
  • 使用者可以决定组件内部的内容。

二、插槽的基本使用

插槽基本使用就是:抽取共性,保留不同。使用者提供插槽内容。

方式1:基本使用

<div id="app">
 <!-- 调用组件 --> 
 <cld>插槽内容</cld>
</div>

<!-- 组件内容 --> 
<template id="child">
 <div>子组件内容
  <slot></slot>  
 </div>
</template>

方式2:添加默认值

给插槽内添加默认值,使用组件时,插槽没有填入内容就会展示默认内容,如果使用组件时传入插槽内容,就会展示对应的内容。

<div id="app">
 <!-- 调用组件 --> 
 <cld></cld>
</div>

<!-- 组件内容 --> 
<template id="child">
 <div>子组件内容
  <slot>默认内容</slot>  
 </div>
</template>

此时页面展示 默认内容。

<div id="app">
 <!-- 调用组件 --> 
 <cld>传入插槽内容</cld>
</div>

<!-- 组件内容 --> 
<template id="child">
 <div>子组件内容
  <slot>默认内容</slot>  
 </div>
</template>

此时页面展示 传入插槽内容。

方式3:具名插槽

具名插槽就是有具体名字的插槽,基本用法为:

  • slot 插槽必须绑定 name 属性。
  • 使用组件时,插槽内容需要添加slot属性。
  • 通过slot属性来指定,这个slot的值必须和下面的slot组件的name值对应上,如果没有匹配到,则放到匿名的插槽中。
<!-- 组件调用 -->
<div id="app">
 <cld>没有插槽内容 
  <h2 slot="title">标题</h2> 
 </cld>
</div>

<!-- 子组件内容 -->
  <template id="child">
 <div>
  <slot name="title"></slot> 
子组件内容
  <slot>默认内容</slot>  
 </div>
</template>

三、作用域插槽

我们经常通过父组件给子组件传递展示内容,但是作用域插槽刚好相反,是父组件替换插槽的标签,但是内容由子组件来提供。

slot-scope 获取插槽作用域,其实就是把组件内的数据带出来。

<!-- 子组件使用  -->
<cld >
 <template slot="title" slot-scope="scope">
  <div  >获取数据
   <li v-for="item in scope.data">{{item}}</li>
  </div>
 </template> 
</cld>

<!-- 子组件内容 -->
<template id="child" >
 <div>
  <slot name="title" :data="color"></slot> 
 </div>
</template>
<script>export default{
 data(){
  return{
    color:['red','oranage','yellow','green']
   }
  }
}
</script>

作用:主要用于提供的组件带有一个可从子组件获取数据的可复用的插槽,为了让这个特性成为可能,把需要的数据全部包裹在一个slot元素上,然后通过 slot-scope 特性,把数据从子组件获取出来。

注意:在 vue 的 2.5.0 版本以下,slot-scope 必须绑定在 template 元素上,而更高版本 vue,没有此限制,可以用于任何元素或组件上。

相关文章

微信公众号

最新文章

更多