在Vue3之中的slot,是一种模板类的形式出现的,即子类,或者说引用类提供了对外暴露的接口,那么使用者或者说父类就可以声明如何使用插槽。

我们会分别说明基本的使用方式,进阶的指定使用,以及在使用的过程中,指定使用子类的哪部分数据。

首先是最简单的使用方式

一般来说,如果需要引入某些组件的时候,是首先在下面 import 。。。 from xxx

然后在上面的<template>之中,进行单标签的使用,就比如<category/>

但如果我们在子类中的template之中声明了
<slot>之后,我们就可以在父类之中注入某些数据从而进行展示

<template>

<div class=”item”>

<slot></slot>

</div>

<template>

父类之中,就可以

<category/>

<ul>

<li v-for=”g in games” :key=”g.id”>{{g.name}}</li>

</ul>

<category/>

在这种使用方式下,存在着一个问题,就是往往子类,或者说模板类中暴露了不同的插槽,我们也希望使用不同的插槽,那时候该怎么办呢?

这时候可以使用具名插槽

子组件中可以

<template>

<div class=”item”>

<slot name = ”s1”></slot>

<slot name = ”s2”></slot>

</div>

<template>

那么在父组件之中就可以指定名称来使用插槽

<category/>

<template v-slot:s1>

<ul>

<li v-for=”g in games” :key=”g.id”>{{g.name}}</li>

</ul>

<template>

<category/>

v-slot:s1的方式声明使用哪个插槽

当然,其还提供了一个语法糖

<template #s2>

最后是模板类还提供了一种在暴露插槽的同时,还暴露了数据给插槽使用着

首先是子组件如何暴露数据给插槽使用者

比如我们有一组数据

let games = reactive([

{id:’asgdytsa01′,name:’英雄联盟’},

{id:’asgdytsa02′,name:’王者荣耀’},

{id:’asgdytsa03′,name:’红色警戒’},

{id:’asgdytsa04′,name:’斗罗大陆’}

])

那么在对外提供插槽的时候,就可以连带着这组games进行暴露

<template>

<div class=”category”>

<h2>今日游戏榜单</h2>

<slot name=”s1” :games=”games” a=”哈哈”></slot>

</div>

</template>

这样在使用的时候

就可以利用冒号后的key获取并指定值了

<category/>

<template v-slot:s1=“params”>

<ul>

<li v-for=”g in params .games” :key=”g.id”>{{g.name}}</li>

</ul>

<template>

<category/>

发表评论

邮箱地址不会被公开。 必填项已用*标注