7、slot插槽

217 阅读2分钟

一、slot的作用:

slot作为组件用户自定义内容的占位符:

1、简单用法:新建一个myslot的组件:提供一个占位插槽

<template>
	<div>
		<div>你好</div>
		<slot>世界</slot>
	</div>
</template>

//在其他页面引入mysolt的组件:

import mysolt from './myslot.vue'

<mysolt>
	<p>wolrd</p>
</mysolt>

<slot>世界</slot>会被<p>wolrd</p> <div>new content</div>替换:最终页面会渲染成:

image.png

注意如果插槽模板中有多个标签最好用 `<template>`包裹一下

2、插槽的默认内容

<slot>世界</slot> ‘世界’就插槽的默认内容,就是在使用myslot组件时,如果不提供组件的innerHTML就显示默认的内容。如:

<mysolt></mysolt>

页面将渲染如下:

image.png

3、具名插槽

如果一个组件里面需要多个占位插槽,那么就需要给不同的插槽提供一个name attribute,一个不带 name 的 <slot> 占位插槽默认名字为“default”,现在 <template> 元素中的所有内容都将会被传入相应的插槽:

用v-solt指定插槽的名字
<template v-solt:xxx> <template>

用法如下:

image.png

注意:任何没有被包裹在带有 `v-slot` 的 `<template>` 
中的内容都会被视为默认插槽的内容

4、作用域插槽

如果需要使用插槽组件内的数据,必须在插槽组件提供者必须用 v-bind:xxx=xxx 显示给外部插槽模板提供数据,否则取不到。

1、向插槽外部模板提供数据:
 <slot name="slot1" v-bind:content="content"></slot>
2、接收插槽组件提供的数据:
<template v-slot:slot1="props">
3、由于props是一个对象所以可以解构里面的属性

用法如下:

image.png

渲染结果:

image.png 根据以上用法得出结论:

1、使用插槽的组件提供重复的具名插槽模板,后面的覆盖前面的模板如插槽1

2、插槽4取不到content是因为插槽内部不提供数据源

3、在使用插槽组件时,提供的插槽模板的顺序无关,插槽的顺序时由插槽提供者决定。

5、动态具名插槽、插槽缩写;

 1、具名插槽的缩写:v-solt:name——> #name
 
 2、具名作用域插槽的缩写:v-solt:name='props'——> #name=props
 
 3、v-solt:[name]

用法:

image.png