子组件写插槽位置
父组件写内容放入插槽
插槽内容无法访问子组件的数据
非作用域插槽
123 123 123 #header,#xxx#default,或者不写 作用域插槽:使父组件写的插槽的内容访问到子组件的数据
{{ slotProps.text }} {{ text }} {{ count }} {{ headerProps }} {{ message }} {{ message }}
<template>
<view>
<solt>solt>
view>
template>
<hello>
<view>111view>
hello>
<template>
<view>
<solt>我是默认内容solt>
view>
template>
<hello>
<view>我能替代默认内容view>
hello>
出口会隐式地命名为“default”。 元素,并将目标插槽的名字传给该指令#
<template>
<view>
<slot name="header">slot>
view>
template>
<hello>
<template v-slot:header>
template>
<template #header>
template>
hello>
当一个组件同时接收默认插槽和具名插槽时,所有位于顶级的非 节点都被隐式地视为默认插槽的内容
<template>
<view>
<slot name="header">slot>
---
<slot>slot>
view>
template>
<hello>
<template #header>
template>
<template #default>
template>
hello>
或
<hello>
<template #header>
template>
hello>
动态指令参数在 v-slot 上也是有效的,即可以定义下面这样的动态插槽名:
<base-layout>
<template v-slot:[dynamicSlotName]> ... template>
<template #[dynamicSlotName]> ... template>
base-layout>
可以像对组件传递 props 那样,向一个插槽的出口上传递 attributes
默认插槽通过子组件标签上的 v-slot 指令,直接接收到了一个插槽 props 对象:
<div>
<slot :text="greetingMessage" :count="1">slot>
div>
<MyComponent v-slot="slotProps">
{{ slotProps.text }} {{ slotProps.count }}
MyComponent>
<MyComponent v-slot="{ text, count }"> {{ text }} {{ count }} MyComponent>
v-slot:header="slotProps"#header="slotProps"
<div>
<slot name="header" :text="greetingMessage" :count="1">slot>
div>
<MyComponent>
<template #header="headerProps"> {{ headerProps }} template>
<template #default="defaultProps"> {{ defaultProps }} template>
MyComponent>
如果你混用了具名插槽与默认插槽,则需要为默认插槽使用显式的 标签。尝试直接为组件添加 v-slot 指令将导致编译错误。这是为了避免因默认插槽的 props 的作用域而困惑。举例:
<MyComponent v-slot="{ message }">
<p>{{ message }}p>
<template #footer>
<p>{{ message }}p>
template>
MyComponent>
为默认插槽使用显式的 标签有助于更清晰地指出 message 属性在其它插槽中不可用:
<MyComponent>
<template #default="{ message }">
<p>{{ message }}p>
template>
<template #footer>
<p>Here's some contact infop>
template>
MyComponent>