首页 > 如何理解Vue.js的组件中的slot?

如何理解Vue.js的组件中的slot?

官方文档中这一节看不太懂,是否可以解释一下?slot应用场景在哪里?


slot之前我们先来说一般组件,通常我们自定义一个组件,期待用户这样使用它们:

<自定义组件 :参数="variable" @事件="handler"></自定义组件>

这种组件产生的样式都在自定义组件的内部,使用者是无法对其进行调整的,或者说没办法通过传入一些html进行调整

现在假设我们有这样一个名片组件的需求,该名片组件的除了标题外还希望提供使用者便利可以自行调整主体内容的格式,设计的结果是这样:

<名片 :url="名片地址">
    <h1>我是我</h1>
    <strong>我就是不一样的烟火!!!</strong>
    <img src="我的头像在这里"></img>
</名片>

OK,看到了需求,用户希望你的组件可以这样使用,你怎么办?这就是slot出现的背景,最后上文档,方便理解


官网其实已经解释得很清楚了 内容分发 简单点就是 一个组件的一部分 你不满足默认的内容太过简单 那么你可以将这部分定义成slot这个里面放默认的内容 当用户需要自定义这部分内容的时候就可以使用这个特性去定义自己更加高级 更加复杂的内容 使用方法文档都有 手机码字 我就不贴地址了


简单点说就是,能够在组件内写其他内容,举个例子:
我们有一个组件 app, 然后在页面中使用这个组件的时候:

<div>
  <app></app>
</div>

这个时候我们的app是已经定义好了内容的,那如果我想在app里再加入点其他内容呢,像这样:

<div>
  <app>
    <p>新添加的p标签</p>
  </app>
</div>

如果没有slot那上面这样写就会报错,如果我们在app组件内有一个slot那这样写就是可以的~


主要是让组件的可扩展性更强。
1.匿名slot使用

//定义组件my-component
<div class="myComponent">
  <slot></slot>
</div>
//使用方法
<my-component>
  <p>我就是slot的替代内容,这里可以放任何标签元素,即使是一长串ul>li列表</p>
</my-component>

2.具名slot使用

//定义组件my-component
<div class="myComponent">
  <slot name="mySlot"></slot>
</div>
//使用方法
<my-component>
  <p slot="mySlot">我就是这个叫mySlot的slot替代内容,这里可以放任何标签元素,即使是一长串ul>li列表,但是我是一个有名字的宝宝,所以你必须给我加上slot="mySlot",不然我就报错给你看!</p>
</my-component>

如果不在有slot的组件里加入任何标签,slot什么都不会显示的。


文档很清楚,这里给个最浅显的例子。

比如你自己做了个一个button组件,在根组件里注册为vButton,从而复用。
那么各个button上的文字肯定是不同的,但是这些文字大部分情况下也是不需要动态更新的,那么就不必用props之类的方法从根组件向子组件传递文字,直接用slot即可。

button组件假如是这样:

<template>
  <button>
    <slot></slot>
  </button>
</template>

根组件就可以这样用它:

<v-button>按钮文字</v-button>

这是最简单的一个用法示例。

【热门文章】
【热门文章】