vue具名插槽
1、 具名插槽就是给每一个插槽增加了一个name属性让每一个插槽都有自己的名字,这样方便,父组件中的配置按照相应的地方插入(插中间的插中间,插下面的插下面)
1)、App.vue代码:
<template>
<div class="container">
<Category title="美食">
<img slot="center" src="D:\gr信息\图集\2.jpg" alt="1" />
<a slot="footer" href="http://www.baidu.com/">牛肉饭</a>
</Category>
<Category title="游戏" :listData="games">
<ul slot="center">
<!-- 这时候因为变量直接在app.vue中所以可以直接去遍历game
遍历完了再利用插槽的功能传递给Category.vue -->
<li v-for="(g, index) in games" :key="index">
{{ g }}
</li>
<div class="foot" slot="footer">
<a href="http://www.baidu.com/">网络游戏</a>
<a href="http://www.baidu.com/">单机游戏</a>
</div>
</ul></Category
>
<Category title="电影" :listData="films">
<!-- controls 可以让video可以播放 -->
<video
slot="center"
controls
src="http://clips.vorwaerts-gmbh.de/big_buck_bunny.mp4"
></video>
<template v-slot:footer>
<div class="dianyin" slot="footer">
<a href="http://www.baidu.com/">经典</a>
<a href="http://www.baidu.com/">热门</a>
<a href="http://www.baidu.com/">推荐</a>
</div>
<h4>欢迎观影</h4>
</template>
</Category>
</div>
</template>
<script>
import Category from "./components/Category";
export default {
name: "App",
components: { Category },
data() {
return {
foods: ["火咕", "你肉", "丸子"],
games: ["红警在线", "穿越火线", "劲舞团"],
films: ["《教父》", "《拆弹专家》", "《牛逼》"],
};
},
};
</script>
<style>
.container,
.foot,
.dianyin {
display: flex;
justify-content: space-around;
}
video {
width: 100%;
}
img {
width: 100%;
}
h4 {
text-align: center;
}
</style>
2)、Category.vue代码
<template>
<div class="category">
<h3>{{ title }}分类</h3>
<!-- 定义一个默认插槽,那么App.vue中相应的组件标签里标签体的内容会往这个插槽中放置 -->
<slot name="center"></slot>
<slot name="footer"></slot>
</div>
</template>
<script>
export default {
name: "Category",
props: ["title"],
};
</script>
<style>
.category {
background-color: skyblue;
width: 200px;
height: 300px;
}
h3 {
text-align: center;
background-color: orange;
}
</style>
- template 标签和 div的区别在于 template 可以包裹元素但是不会生成真实的DOM元素
- 其中最新的vue2中template标签中具名插槽可以写成:
v-slot:footer