• Vue32 插槽


    1 简介

      是一种组件间通信的方式,让父组件可以向子组件指定位置插入 html 结构。子组件中的提供给父组件使用的一个占位标签,用<slot></slot> 表示,父组件可以在这个占位符中填充任何模板代码,如 HTML、组件等,填充的内容会替换子组件的<slot></slot>标签。简单理解就是子组件中留下个“坑”,父组件可以使用指定内容来补“坑”。

      匿名插槽,具名插槽, 作用域插槽

    2 匿名插槽

    2.1 子组件 StudentComp.vue

      在子组件StudentComp.vue中,<h1>小学生</h1>这个标签下面的结构是不确定的,希望在父组件使用该组件的时候传入结构。所以在这里添加一个slot标签。并且可以填写默认结构,当父组件不传时显示默认结构

    <template>
        <div>
           
            <h1>小学生</h1>
    
            <slot>默认内容(父组件不传结构时显示)</slot>
           
        </div>
        
    </template>
    
    <script>
    
    
        export default {
            name:'StudentComp',
            data(){
                return {
                  
                }
            }
        }
    </script>

    2.2 父组件SchoolComp.vue

      如下,在使用StudentComp标签时,可以传入结构。在传入的结果上面需要加上一个属性slot,一般都用一个template标签来包裹要传入的结果

    <template>
        <div>
            <h1 >实验小学</h1>
            <StudentComp >
                <template slot>
                    <h1 >父组件传入的结构</h1>
                    <button>父组件传入的结构</button>
                </template>
                
            </StudentComp>
            
        </div>
    </template>
    
    <script>
    import StudentComp from './StudentComp'
    
    
        export default {
            name:'SchoolComp',
            data(){
                return {
                   
                }
            },
            components:{
                StudentComp
            }
            
        }
    </script>

    2.3 效果

    3 具名插槽

      具名插槽是匿名插槽的扩展。就是在slot标签加了一个name属性,这个样子可以区分多个slot标签

    3.1 子组件StudentComp.vue

      这里有两个插槽,设置name属性

    <template>
        <div>
           
            <h1>小学生</h1>
    
            <slot name="slot1">默认内容1(父组件不传结构时显示)</slot>
    
            <h1>中学生</h1>
            <slot name="slot2">默认内容2(父组件不传结构时显示)</slot>
           
        </div>
        
    </template>
    
    <script>
    
    
        export default {
            name:'StudentComp',
            data(){
                return {
                  
                }
            }
        }
    </script>

    3.2 父组件SchoolComp.vue

      这里要传入的结果slot属性的值要设置为要插入的插槽的name属性值

    <template>
        <div>
            <h1 >实验小学</h1>
            <StudentComp >
                <template slot="slot1">
                    <h1 >父组件传入的结构</h1>
                    <button>父组件传入的结构</button>
                </template>
    
                <template slot="slot2">
                    <h1 >父组件传入的结构2</h1>
                    <button>父组件传入的结构2</button>
                </template>
                
            </StudentComp>
            
        </div>
    </template>
    
    <script>
    import StudentComp from './StudentComp'
    
    
        export default {
            name:'SchoolComp',
            data(){
                return {
                   
                }
            },
            components:{
                StudentComp
            }
            
        }
    </script>

    3.3 效果

    4 作用域插槽

      作用域插槽扩展了一个功能,可以把子组件的数据传到父组件

    4.1 子组件StudentComp.vue

      在插槽,可以传入数据到父组件那里。

      在slot标签填写任意属性名,传入数据(可以填写多个属性名)

      这里传入了两个数据,名字分别为datalist和count

    <template>
        <div>
           
            <h1>小学生</h1>
    
            <slot name="slot1" :datalist="datalist" :count="count">默认内容1(父组件不传结构时显示)</slot>
    
        </div>
        
    </template>
    
    <script>
    
    
        export default {
            name:'StudentComp',
            data(){
                return {
                  datalist:['a','b','c'],
                  count:1
                }
            }
        }
    </script>

    4.2 父组件SchoolComp.vue

      使用scope属性接收数据,接收到的是一个key-value对象

      如下面,通过data.datalist和data.count可以获取到两个数据

    <template>
        <div>
            <h1 >实验小学</h1>
            <StudentComp >
                <template slot="slot1" scope="data">
                    <ul>
                        <li v-for="(g,index) in data.datalist" :key="index">{{g + '-' + data.count}}</li>
                    </ul>
                </template>
    
                
            </StudentComp>
            
        </div>
    </template>
    
    <script>
    import StudentComp from './StudentComp'
    
    
        export default {
            name:'SchoolComp',
            data(){
                return {
                   
                }
            },
            components:{
                StudentComp
            }
            
        }
    </script>

    4.3 效果

  • 相关阅读:
    win10下jdk8和jdk11切换的批处理脚本
    Deeping中使用python连接Oralce报错:Cannot locate a 64-bit Oracle Client library: "./instantclient_21_1/libclntsh.so: file too short"
    Redis作者“不懂”分布式锁【转载】
    搭建nacos高可用集群
    使用spring.config.location与本地配置文件属性不能互补
    protocol buffer应用场景方案想法
    protocol buffer 入门和基本知识
    IDEA快捷键
    软考问题总结
    pandas 使用问题记录
  • 原文地址:https://www.cnblogs.com/jthr/p/16518008.html
Copyright © 2020-2023  润新知