# 插槽
# 默认插槽
子组件:
<template>
<!--这是一个一居室-->
<div class="one-bedroom">
<!--添加一个默认插槽,用户可以在外部随意定义这个一居室的内容-->
<slot></slot>
</div>
</template>
1
2
3
4
5
6
7
2
3
4
5
6
7
父组件:
<template>
<!--这里一居室-->
<one-bedroom>
<!--将家具放到房间里面,组件内部就是上面提供的默认插槽的空间-->
<span>先放一个小床,反正没有女朋友</span>
<span>再放一个电脑桌,在家还要加班写bug</span>
</one-bedroom>
</template>
<script>
import OneBedroom from "../components/one-bedroom";
export default {
components: {
OneBedroom
}
};
</script>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# 具名插槽
子组件:
<template>
<div class="two-bedroom">
<!--这是主卧-->
<div class="master-bedroom">
<!---主卧使用默认插槽-->
<slot></slot>
</div>
<!--这是次卧-->
<div class="secondary-bedroom">
<!--次卧使用具名插槽-->
<slot name="secondard"></slot>
</div>
</div>
</template>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
2
3
4
5
6
7
8
9
10
11
12
13
14
父组件:
<template>
<two-bedroom>
<!--主卧使用默认插槽-->
<div>
<span>放一个大床,要结婚了,嘿嘿嘿</span>
<span>放一个衣柜,老婆的衣服太多了</span>
<span>算了,还是放一个电脑桌吧,还要写bug</span>
</div>
<!--次卧,通过v-slot:secondard 可以指定使用哪一个具名插槽, v-slot:secondard 也可以简写为 #secondard-->
<template v-slot:secondard>
<div>
<span>父母要住,放一个硬一点的床,软床对腰不好</span>
<span>放一个衣柜</span>
</div>
</template>
</two-bedroom>
</template>
<script>
import TwoBedroom from "../components/slot/two-bedroom";
export default {
components: {
TwoBedroom
}
};
</script>
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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
# 作用域插槽
子组件:
<template>
<div class="two-bedroom">
<!--其他内容省略-->
<div class="toilet">
<!--通过v-bind 可以向外传递参数, 告诉外面卫生间可以放洗衣机-->
<slot name="toilet" v-bind="{ washer: true }"></slot>
</div>
</div>
</template>
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
父组件:
<template>
<two-bedroom>
<!--其他省略-->
<!--卫生间插槽,通过v-slot="scope"可以获取组件内部通过v-bind传的值-->
<template v-slot:toilet="scope">
<!--判断是否可以放洗衣机-->
<span v-if="scope.washer">这里放洗衣机</span>
</template>
</two-bedroom>
</template>
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
# 插槽默认值
子组件:
<template>
<div class="second-hand-house">
<div class="master-bedroom">
<!--插槽可以指定默认值,如果外部调用组件时没有修改插槽内容,则使用默认插槽-->
<slot>
<span>这里有一张水床,玩的够嗨</span>
<span>还有一个衣柜,有点旧了</span>
</slot>
</div>
<!--这是次卧-->
<div class="secondary-bedroom">
<!--次卧使用具名插槽-->
<slot name="secondard">
<span>这里有一张婴儿床</span>
</slot>
</div>
</div>
</template>
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
父组件:
<second-hand-house>
<!--主卧使用默认插槽,只装修主卧-->
<div>
<span>放一个大床,要结婚了,嘿嘿嘿</span>
<span>放一个衣柜,老婆的衣服太多了</span>
<span>算了,还是放一个电脑桌吧,还要写bug</span>
</div>
</second-hand-house>
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8