# slot 插槽
# 编译作用域
父级模板里的所有内容都是在父级作用域中编译的;子模板里的所有内容都是在子作用域中编译的。
# 后备内容
当不提供任何插槽内容时:后备内容“Submit”将会被渲染:
<button type="submit">
<slot>Submit</slot>
</button>
1
2
3
2
3
# 具名插槽
<header>
<slot name="header"></slot>
</header>
template 加上v-slot:header渲染到对应插槽
<template v-slot:header>
<h1>Here might be a page title</h1>
</template>
<template #header>
<h1>Here might be a page title</h1>
</template>
1
2
3
4
5
6
7
8
9
10
11
12
2
3
4
5
6
7
8
9
10
11
12
# 作用域插槽
让插槽内容能够访问子组件中才有的数据
var currentUser = {
tempalte:`
<span>
<slot v-bind:userInfo="user">
{{ user.lastName }}
</slot>
</span>
`
data() {
return{
user:{
lastName: '曹'
}
}
}
}
<current-user>
<!-- 正常写法 -->
<template v-slot:default="slotProps">
{{ slotProps.userInfo.firstName }}
</template>
<!-- 正常写法的缩写 -->
<template #default="slotProps">
<h1>Here might be a page title</h1>
</template>
</current-user>
<!-- 模板缩写 -->
<current-user v-slot="slotProps">
{{ slotProps.userInfo.firstName }}
</current-user>
<!-- 结构 -->
<current-user v-slot="{ userInfo }">
{{ userInfo.firstName }}
</current-user>
<!-- 缩写加解构 -->
<current-user #default="{ userInfo }">
{{ userInfo.firstName }}
</current-user>
<!-- 解构 并重命名 -->
<current-user v-slot="{ userInfo: person }">
{{ person.firstName }}
</current-user>
<!-- -->
<current-user #default="{ userInfo: person }">
{{ person.firstName }}
</current-user>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
:::tips 自 2.6.0 起有所更新。已废弃的使用 slot-scope :::
# 动态插槽名
<base-layout>
<template v-slot:[dynamicSlotName]>
...
</template>
</base-layout>
1
2
3
4
5
6
7
2
3
4
5
6
7
← Ts开发 Vue Vue过渡 & 动画原理 →