• Vue插槽---默认插槽、具名插槽、作用域插槽


    目录

    总结

          1.默认插槽

          2.具名插槽

          3.作用域插槽

    一、不使用插槽的效果

     App.vue

    Category.vue

    二、默认插槽

    App.vue

    Category.vue

    三、具名插槽

    App.vue

    Category.vue

    四、作用域插槽

    App.vue

    Category.vue


    总结

         作用:让父组件可以向子组件指定位置插入html结构,也是一种组件间通信的方式,适用于父组件===》子组件

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

        使用:

          1.默认插槽

     

          2.具名插槽

     

          3.作用域插槽

              作用域插槽也可以有名字

               理解:数据在组件的自身,但根据数据生成的结构需要组件的使用者来决定

          

     

     

    一、不使用插槽的效果

     App.vue

    1. <template>
    2. <div class="container">
    3. <Category title="美食" :listData="foods" >Category>
    4. <Category title="游戏" :listData="games">Category>
    5. <Category title="电影" :listData="films">Category>
    6. div>
    7. template>
    8. <script>
    9. import Category from './components/Category.vue';
    10. export default{
    11. name:"App",
    12. data(){
    13. return{
    14. foods:['火锅','烧烤','小龙虾','牛排'],
    15. games:['红色警戒','穿越火线','劲舞团','超级玛丽'],
    16. films:['《教父》','《拆弹专家》','《你好,李焕英》']
    17. }
    18. },
    19. components: {
    20. Category
    21. }
    22. }
    23. script>
    24. <style lang="css">
    25. .container{
    26. /* 弹性布局 */
    27. display: flex;
    28. /* */
    29. justify-content: space-around;
    30. }
    31. style>

    Category.vue

    1. <template>
    2. <div class="category">
    3. <h3>{{title}}分类h3>
    4. <ul>
    5. <li v-for="(item,index) in listData" :key="index">{{item}}li>
    6. ul>
    7. div>
    8. template>
    9. <script>
    10. export default{
    11. name:'Category',
    12. props:['listData','title']
    13. }
    14. script>
    15. <style scoped>
    16. .category{
    17. background-color:skyblue ;
    18. width:200px;
    19. height:300px;
    20. }
    21. h3{
    22. text-align:center;
    23. background-color: orange;
    24. }
    25. style>

    二、默认插槽

    App.vue

    1. <template>
    2. <div class="container">
    3. <Category title="美食" >
    4. <img src="https://s3.ax1x.com/2021/01/16/srJlq0.jpg" alt="">
    5. Category>
    6. <Category title="游戏" >
    7. <ul>
    8. <li v-for="(g,index) in games" :key="index">{{g}}li>
    9. ul>
    10. Category>
    11. <Category title="电影">
    12. <video controls src="http://clips.vorwaerts-gmbh.de/big_buck_bunny.mp4">video>
    13. Category>
    14. div>
    15. template>
    16. <script>
    17. import Category from './components/Category.vue';
    18. export default{
    19. name:"App",
    20. data(){
    21. return{
    22. foods:['火锅','烧烤','小龙虾','牛排'],
    23. games:['红色警戒','穿越火线','劲舞团','超级玛丽'],
    24. films:['《教父》','《拆弹专家》','《你好,李焕英》']
    25. }
    26. },
    27. components: {
    28. Category
    29. }
    30. }
    31. script>
    32. <style lang="css">
    33. .container{
    34. /* 弹性布局 */
    35. display: flex;
    36. /* */
    37. justify-content: space-around;
    38. }
    39. style>

    Category.vue

    1. <template>
    2. <div class="category">
    3. <h3>{{title}}分类h3>
    4. <slot>我是默认值,当使用者没有传递具体结构时,我会出现slot>
    5. div>
    6. template>
    7. <script>
    8. export default{
    9. name:'Category',
    10. props:['title']
    11. }
    12. script>
    13. <style scoped>
    14. video{
    15. width: 100%;
    16. }
    17. img{
    18. width: 100%;
    19. }
    20. .category{
    21. background-color:skyblue ;
    22. width:200px;
    23. height:300px;
    24. }
    25. h3{
    26. text-align:center;
    27. background-color: orange;
    28. }
    29. style>

    三、具名插槽

    App.vue

    1. <template>
    2. <div class="container">
    3. <Category title="美食" >
    4. <img slot="center" src="https://s3.ax1x.com/2021/01/16/srJlq0.jpg" alt="">
    5. <a slot="footer" href="http://www.atguigu.com">更多美食a>
    6. Category>
    7. <Category title="游戏" >
    8. <ul slot="center">
    9. <li v-for="(g,index) in games" :key="index">{{g}}li>
    10. ul>
    11. <div class="foot" slot="footer">
    12. <a href="http://www.atguigu.com">单机游戏a>
    13. <a href="http://www.atguigu.com">网络游戏a>
    14. div>
    15. Category>
    16. <Category title="电影">
    17. <video slot="center" controls src="http://clips.vorwaerts-gmbh.de/big_buck_bunny.mp4">video>
    18. <div class="foot" slot="footer">
    19. <a href="http://www.atguigu.com">经典a>
    20. <a href="http://www.atguigu.com">热门a>
    21. <a href="http://www.atguigu.com">推荐a>
    22. div>
    23. Category>
    24. div>
    25. template>
    26. <script>
    27. import Category from './components/Category.vue';
    28. export default{
    29. name:"App",
    30. data(){
    31. return{
    32. foods:['火锅','烧烤','小龙虾','牛排'],
    33. games:['红色警戒','穿越火线','劲舞团','超级玛丽'],
    34. films:['《教父》','《拆弹专家》','《你好,李焕英》']
    35. }
    36. },
    37. components: {
    38. Category
    39. }
    40. }
    41. script>
    42. <style lang="css">
    43. .container,.foot{
    44. /* 弹性布局 */
    45. display: flex;
    46. /* */
    47. justify-content: space-around;
    48. }
    49. style>

    Category.vue

    1. <template>
    2. <div class="category">
    3. <h3>{{title}}分类h3>
    4. <slot name="center">我是默认值,当使用者没有传递具体结构时,我会出现slot>
    5. <slot name="footer">我是默认值,当使用者没有传递具体结构时,我会出现slot>
    6. div>
    7. template>
    8. <script>
    9. export default{
    10. name:'Category',
    11. props:['title']
    12. }
    13. script>
    14. <style scoped>
    15. video{
    16. width: 100%;
    17. }
    18. img{
    19. width: 100%;
    20. }
    21. .category{
    22. background-color:skyblue ;
    23. width:200px;
    24. height:300px;
    25. }
    26. h3{
    27. text-align:center;
    28. background-color: orange;
    29. }
    30. style>

    四、作用域插槽

     

    App.vue

    1. <template>
    2. <div class="container">
    3. <Category title="游戏" >
    4. <template scope="games">
    5. <ul slot="center">
    6. <li v-for="(g,index) in games.games" :key="index">{{g}}li>
    7. ul>
    8. template>
    9. Category>
    10. <Category title="游戏" >
    11. <template scope="games">
    12. <ol slot="center">
    13. <li v-for="(g,index) in games.games" :key="index">{{g}}li>
    14. ol>
    15. template>
    16. Category>
    17. <Category title="游戏" >
    18. <template scope="{games}">
    19. <h4 v-for="(g,index) in games" :key="index">{{g}}h4>
    20. template>
    21. Category>
    22. div>
    23. template>
    24. <script>
    25. import Category from './components/Category.vue';
    26. export default{
    27. name:"App",
    28. components: {
    29. Category
    30. }
    31. }
    32. script>
    33. <style lang="css">
    34. .container,.foot{
    35. /* 弹性布局 */
    36. display: flex;
    37. /* */
    38. justify-content: space-around;
    39. }
    40. style>

    Category.vue

    1. <template>
    2. <div class="category">
    3. <h3>{{title}}分类h3>
    4. <slot :games="games" msg="hello">我是默认值,当使用者没有传递具体结构时,我会出现slot>
    5. div>
    6. template>
    7. <script>
    8. export default{
    9. name:'Category',
    10. props:['title'],
    11. data(){
    12. return{
    13. games:['红色警戒','穿越火线','劲舞团','超级玛丽'],
    14. }
    15. },
    16. }
    17. script>
    18. <style scoped>
    19. video{
    20. width: 100%;
    21. }
    22. img{
    23. width: 100%;
    24. }
    25. .category{
    26. background-color:skyblue ;
    27. width:200px;
    28. height:300px;
    29. }
    30. h3{
    31. text-align:center;
    32. background-color: orange;
    33. }
    34. style>

  • 相关阅读:
    动态规划和递归法求解斐波那契数列
    【python】TypeError: unhashable type: ‘list‘ 解决方法——简单示例
    微服务框架 SpringCloud微服务架构 22 DSL 查询语法 22.4 地理查询
    Hive 知识点八股文记录 ——(二)优化
    java文件传输简单方法
    Vue3 + ts + jest 单元测试 配置以及使用
    Nacos作为配置中心详解
    OSPF协议LSDB同步过程和邻居状态机
    内存管理之内存寻址(笔记)
    Leetcode 951. 翻转等价二叉树
  • 原文地址:https://blog.csdn.net/weixin_51351637/article/details/126908028