当前位置: 首页 > news >正文

Vue中插槽的简单使用

插槽

  • 分类:默认插槽、具名插槽、作用域插槽

  • 默认插槽:让父组件可以向子组件指定位置插入html结构,也是一种组件通信的方式,适用于父组件(App)===>子组件(MyFooter)

  • 默认插槽的App组件

  • <template><div class="container"><!-- 普通写法 --><!-- title、listDate的位置为标签属性。 --><MyFooter title="游戏" :listDate="games"/>
    ​<!-- 下面都是默认插槽的书写形式--><!-- Vue会将img标签的内容解析后在传给MyFooter组件中的slot插槽中。故将普通写法:listDate="foods"删除掉 --><!-- 标签体的位置为:<MyFooter>标签体</MyFooter>   --><MyFooter title="美食" ><img src="图片地址" alt=""></MyFooter>
    ​<MyFooter title="游戏" ><ul><li v-for="(item,index) in games" :key="index" >{{ item }}</li></ul></MyFooter>
    ​<MyFooter title="电影" ><!-- controls让视频可以通过点击控制播放 --><video controls src="视频地址"></video></MyFooter><router-view /></div>
    </template>
    <script>
    import MyFooter from './components/MyFooter.vue';
    export default {name: 'App',components: { MyFooter },data() {return {foods: ['火锅', '薯条', '汉堡'],games: ['只狼', '大表哥', '黑神话悟空'],files: ['《深海》', '《战狼》', '《流浪地球》']}}
    }
    </script>
    <style lang="less" scoped>
    .container {display: flex;justify-content: space-around
    }
    img {width: 100%;
    }
    video {width: 100%;
    }
    </style>
    ​
  • 默认插槽的MyFooter组件

  • <template><div class="category"><h3>{{ title }}分类</h3><!-- 普通写法 --><!-- 普通写法通过props将listDate传过来进行展示 --><ul><li  v-for="(item,index) in listDate" :key="index" >{{ item }}</li>   </ul><!-- 插槽写法 --><!-- <slot></slot>为默认插槽,挖个坑等使用的组件填充坑的内容 --><slot>如果图片或视频未展示,展示此处的文字</slot></div>
    </template>
    ​
    <script>
    export default {name: 'MyFooter',//这里保留应该只保留title,listDate仅是普通写法需求props: ['title','listDate'],
    }
    </script>
    <style scoped lang="css">.category {background-color: skyblue;width: 200px;height: 300px;}h3 {text-align: center;}
    </style>
    ​
  • 具名插槽的App

  • 具名插槽的给MyFooter的slot标上名字name="xxx",在App组件中使用那个插槽则slot="xxx"。进行相互匹配

  • <template><div class="container">
    ​<!-- 有名插槽 --><!-- title的位置为标签属性。--><MyFooter title="美食" ><!-- 给img、a匹配相应的插槽名字,对应相应组件中的插槽 --><img slot="center" src="图片地址" alt=""><a slot="footer" href="网址地址">美食地址</a><a slot="footer" href="网址地址">电影地址</a></MyFooter>
    ​<MyFooter title="游戏" ><ul slot="center"><li  v-for="(item,index) in games" :key="index" >{{ item }}</li></ul><div slot="footer"><a slot="footer" href="网址地址">热门推荐</a><a slot="footer" href="网址地址">网络共享</a></div></MyFooter>
    ​<MyFooter title="电影" ><!-- controls让视频可以通过点击控制播放 --><video slot="center" controls src="视频地址"></video>\<!-- template让下列的代码少了一层div 同时可以将slot="footer"去掉,改成在template标签属性的位置使用 v-slot:footer --><template><div slot="footer"><a slot="footer" href="网址地址">动漫</a><a slot="footer" href="网址地址">生活</a></div><a slot="footer" href="网址地址">动画片</a></template></MyFooter><router-view /></div>
    </template>
    <script>
    import MyFooter from './components/MyFooter.vue';
    export default {name: 'App',components: { MyFooter },data() {return {foods: ['火锅', '薯条', '汉堡'],games: ['只狼', '大表哥', '黑神话悟空'],files: ['《深海》', '《战狼》', '《流浪地球》']}}
    }
    </script>
    <style lang="less" scoped>
    .container {display: flex;justify-content: space-around
    }
    img {width: 100%;
    }
    video {width: 100%;
    }
    </style>
     
  • 具名插槽的MyFooter

  • <template><div class="category"><h3>{{ title }}分类</h3><!-- <slot name=""></slot>为具名插槽,挖个坑等使用的组件填充坑的内容 --><slot name="center">如果图片或视频未展示,展示此处的文字</slot><slot name="footer">如果图片或视频未展示,展示此处的文字</slot></div>
    </template>
    ​
    <script>
    export default {name: 'MyFooter',props: ['title'],
    }
    </script>
    ​
    <style scoped lang="css">.category {background-color: skyblue;width: 200px;height: 300px;}h3 {text-align: center;}
    </style>
     
  • 作用域插槽理解:

    1、和上面两种插槽不同,作用域插槽数据(games) 在组件(MyFooter)但数据的结构需要组件的使用者(App)来决定

    2、在MyFooter通过slot传给App,App组件通过scope进行接收。

  • App组件(vm)的管家。App不仅是组件,也管理所有的组件

  • <template><div class="container">
    ​<MyFooter title="游戏" ><!-- 要想接收MyFooter传过来的games需要写成template形式通过scope来接收传过来的值,注意这里不是scoped而是scope。 --><template scope="boy"><ul ><!-- 通过{{ games }}可以知道,只有boy.games才可以拿到数组,games是MyFooter传过来的数组是不可以修改的。 --><li  v-for="(item, index) in boy.games" :key="index" >{{ item }}</li></ul></template></MyFooter>
    ​<MyFooter title="游戏" ><!-- 可以将scope="xxx"改成slot-scope="xxx"。slot-scope="xxx"是新的书写方式 --><template scope="boy"><ol ><li  v-for="(item, index) in boy.games" :key="index" >{{ item }}</li></ol></template></MyFooter>
    ​<MyFooter title="游戏" ><!-- 用ES6的形式写成{games},遍历的时候可以直接写games --><template scope="{games}"><h4  v-for="(item, index) in games" :key="index" >{{ item }}</h4></template></MyFooter>
    ​<router-view /></div>
    </template>
    <script>
    import MyFooter from './components/MyFooter.vue';
    export default {name: 'App',components: { MyFooter }
    }
    </script>
    <style lang="less" scoped>
    .container {display: flex;justify-content: space-around
    }
    img {width: 100%;
    }
    video {width: 100%;
    }
    </style>
    ​
  • 作用域插槽的MyFooter组件

  • <template><div class="category"><h3>{{ title }}分类</h3><!-- :games="games"的意思是谁往插槽放数据games就传给谁 --><slot :games="games"></slot></div>
    </template>
    ​
    <script>
    export default {name: 'MyFooter',props: ['title','listDate'],data(){return {games: ['只狼', '大表哥', '黑神话悟空'],}},   
    }
    </script>
    ​
    <style scoped lang="css">.category {background-color: skyblue;width: 200px;height: 300px;}h3 {text-align: center;}
    </style>
http://www.lryc.cn/news/275449.html

相关文章:

  • 华为OD机试真题-机器人仓库搬砖-2023年OD统一考试(C卷)
  • 三维模型数据的几何坐标变换的点云重建并行计算技术方法分析
  • Android 横竖屏切换之窗体泄露leaked window DecorView XXXActivity
  • mysql之视图执行计划
  • 软件安装文档 | Docker (简洁)
  • PHP代码审计之实战审代码篇2
  • 05 Ciso模拟器连接腾讯云物联网开发平台
  • Nginx(二十) 获取真实客户端IP
  • 【攻防世界】Reverse—— IgniteMe writeup
  • m1芯片电脑上的paragon15如何安装激活 m1芯片电脑上ntfs for mac如何安装
  • 【DevOps-01]】DevOps介绍
  • 基于PHP的花店管理系统
  • 《PySpark大数据分析实战》-24.数据可视化图表介绍
  • kafka 偏移量的类型与提交方式
  • TCP服务器的编写(下)
  • Linux系统安全及应用
  • 初识Web服务器
  • IOS - 手机安装包 ipa 常见几种方式
  • 60、resnet50 权值和参数加载
  • wordpress在界面将站点地址直接修改为https导致上不去问题的解决办法
  • 数字IC后端实现之快速获取innovus中drv violation的所有net list
  • 【开源】基于JAVA语言的智能教学资源库系统
  • 数据库定义和操作语句的重要语法
  • 计算机组成原理 CPU的功能和基本结构和指令执行过程
  • 批量归一化:彻底改变深度学习架构
  • Spring05
  • MvvmToolkit的使用
  • 分布式【一致性Hash算法简介】
  • PHP命令行脚本接收传入参数的三种方式
  • 【STM32】STM32学习笔记-ADC单通道 ADC多通道(22)