目录
作用:让父组件可以向子组件指定位置插入html结构,也是一种组件间通信的方式,适用于父组件===》子组件
分类:默认插槽、具名插槽、作用域插槽
使用:
作用域插槽也可以有名字
理解:数据在组件的自身,但根据数据生成的结构需要组件的使用者来决定
- <template>
-
- <div class="container">
- <Category title="美食" :listData="foods" >Category>
- <Category title="游戏" :listData="games">Category>
- <Category title="电影" :listData="films">Category>
- div>
- template>
-
- <script>
- import Category from './components/Category.vue';
-
- export default{
- name:"App",
- data(){
- return{
- foods:['火锅','烧烤','小龙虾','牛排'],
- games:['红色警戒','穿越火线','劲舞团','超级玛丽'],
- films:['《教父》','《拆弹专家》','《你好,李焕英》']
- }
- },
- components: {
- Category
- }
- }
-
- script>
-
- <style lang="css">
- .container{
- /* 弹性布局 */
- display: flex;
- /* */
- justify-content: space-around;
- }
- style>
- <template>
- <div class="category">
- <h3>{{title}}分类h3>
- <ul>
- <li v-for="(item,index) in listData" :key="index">{{item}}li>
- ul>
- div>
- template>
-
- <script>
-
- export default{
- name:'Category',
- props:['listData','title']
- }
- script>
-
-
- <style scoped>
- .category{
- background-color:skyblue ;
- width:200px;
- height:300px;
- }
- h3{
- text-align:center;
- background-color: orange;
- }
- style>
- <template>
-
- <div class="container">
- <Category title="美食" >
- <img src="https://s3.ax1x.com/2021/01/16/srJlq0.jpg" alt="">
- Category>
-
- <Category title="游戏" >
- <ul>
- <li v-for="(g,index) in games" :key="index">{{g}}li>
- ul>
- Category>
-
- <Category title="电影">
-
- <video controls src="http://clips.vorwaerts-gmbh.de/big_buck_bunny.mp4">video>
- Category>
- div>
- template>
-
- <script>
- import Category from './components/Category.vue';
-
- export default{
- name:"App",
- data(){
- return{
- foods:['火锅','烧烤','小龙虾','牛排'],
- games:['红色警戒','穿越火线','劲舞团','超级玛丽'],
- films:['《教父》','《拆弹专家》','《你好,李焕英》']
- }
- },
- components: {
- Category
- }
- }
-
- script>
-
- <style lang="css">
-
- .container{
- /* 弹性布局 */
- display: flex;
- /* */
- justify-content: space-around;
- }
- style>
- <template>
- <div class="category">
- <h3>{{title}}分类h3>
-
- <slot>我是默认值,当使用者没有传递具体结构时,我会出现slot>
-
- div>
- template>
-
- <script>
-
- export default{
- name:'Category',
- props:['title']
- }
- script>
-
-
- <style scoped>
- video{
- width: 100%;
- }
- img{
- width: 100%;
- }
- .category{
- background-color:skyblue ;
- width:200px;
- height:300px;
- }
- h3{
- text-align:center;
- background-color: orange;
- }
- style>
- <template>
-
- <div class="container">
- <Category title="美食" >
- <img slot="center" src="https://s3.ax1x.com/2021/01/16/srJlq0.jpg" alt="">
- <a slot="footer" href="http://www.atguigu.com">更多美食a>
- Category>
-
- <Category title="游戏" >
- <ul slot="center">
- <li v-for="(g,index) in games" :key="index">{{g}}li>
-
- ul>
- <div class="foot" slot="footer">
- <a href="http://www.atguigu.com">单机游戏a>
- <a href="http://www.atguigu.com">网络游戏a>
- div>
- Category>
-
- <Category title="电影">
-
- <video slot="center" controls src="http://clips.vorwaerts-gmbh.de/big_buck_bunny.mp4">video>
- <div class="foot" slot="footer">
- <a href="http://www.atguigu.com">经典a>
- <a href="http://www.atguigu.com">热门a>
- <a href="http://www.atguigu.com">推荐a>
- div>
- Category>
- div>
- template>
-
- <script>
- import Category from './components/Category.vue';
-
- export default{
- name:"App",
- data(){
- return{
- foods:['火锅','烧烤','小龙虾','牛排'],
- games:['红色警戒','穿越火线','劲舞团','超级玛丽'],
- films:['《教父》','《拆弹专家》','《你好,李焕英》']
- }
- },
- components: {
- Category
- }
- }
-
- script>
-
- <style lang="css">
-
- .container,.foot{
- /* 弹性布局 */
- display: flex;
- /* */
- justify-content: space-around;
- }
- style>
- <template>
- <div class="category">
- <h3>{{title}}分类h3>
-
- <slot name="center">我是默认值,当使用者没有传递具体结构时,我会出现slot>
- <slot name="footer">我是默认值,当使用者没有传递具体结构时,我会出现slot>
-
- div>
- template>
-
- <script>
-
- export default{
- name:'Category',
- props:['title']
- }
- script>
-
-
- <style scoped>
- video{
- width: 100%;
- }
- img{
- width: 100%;
- }
- .category{
- background-color:skyblue ;
- width:200px;
- height:300px;
- }
- h3{
- text-align:center;
- background-color: orange;
- }
- style>
- <template>
-
- <div class="container">
-
-
- <Category title="游戏" >
-
-
- <template scope="games">
- <ul slot="center">
- <li v-for="(g,index) in games.games" :key="index">{{g}}li>
- ul>
- template>
- Category>
-
- <Category title="游戏" >
- <template scope="games">
- <ol slot="center">
- <li v-for="(g,index) in games.games" :key="index">{{g}}li>
- ol>
- template>
- Category>
-
- <Category title="游戏" >
- <template scope="{games}">
-
- <h4 v-for="(g,index) in games" :key="index">{{g}}h4>
-
- template>
- Category>
-
-
-
-
- div>
- template>
-
- <script>
- import Category from './components/Category.vue';
-
- export default{
- name:"App",
-
- components: {
- Category
- }
- }
-
- script>
-
- <style lang="css">
-
- .container,.foot{
- /* 弹性布局 */
- display: flex;
- /* */
- justify-content: space-around;
- }
- style>
- <template>
- <div class="category">
- <h3>{{title}}分类h3>
-
-
- <slot :games="games" msg="hello">我是默认值,当使用者没有传递具体结构时,我会出现slot>
-
-
- div>
- template>
-
- <script>
-
- export default{
- name:'Category',
- props:['title'],
- data(){
- return{
- games:['红色警戒','穿越火线','劲舞团','超级玛丽'],
- }
- },
- }
- script>
-
-
- <style scoped>
- video{
- width: 100%;
- }
- img{
- width: 100%;
- }
- .category{
- background-color:skyblue ;
- width:200px;
- height:300px;
- }
- h3{
- text-align:center;
- background-color: orange;
- }
- style>