# 7.slot插槽
在 vue2 中, this.$scopedSlots 可以获取到所有的slot,this.$slot 可以获取到指定的slot,代码如下:
vue2-demo4 父组件:
<template>
<div>
<p>父组件内容</p>
<Hello>
<template v-slot:header>父组件header的内容</template>
父组件的slot
<template v-slot:footer>父组件footer的内容</template>
</Hello>
</div>
</template>
<script>
import Hello from "./hello.vue"
export default {
components:{
Hello
}
}
</script>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
子组件
<template>
<div>
<p>子组件内容</p>
<slot name="header">我是header的slot</slot>
<slot>我是defaults的slot</slot>
<slot name="footer">我是footer的slot</slot>
</div>
</template>
<script>
export default {
mounted () {
console.log(this.$slots, '$slots:父组件的默认slots')//父组件的slots
console.log(this.$slots.header, '$slots:父组件的slots.header')//父组件的slots
console.log(this.$scopedSlots, '$scopedSlots:父组件中所有的slot')//父组件中所有的slot
}
}
</script>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
在vue3中
移除 this.$scopedSlots, 统一到 $slots 选项中
<template>
<div>
<p>子组件内容</p>
<slot name="header">我是header的slot</slot>
<slot>我是defaults的slot</slot>
<slot name="footer">我是footer的slot</slot>
</div>
</template>
<script>
export default {
mounted () {
console.log(this.$slots, '$slots')//父组件的slots
console.log(this.$slots.header(), '$slots')//父组件的slots
console.log(this.$scopedSlots, '$scopedSlots') //undefined
}
}
</script>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18