插槽简写,作用域插槽。

    插槽的简写 (# vue 2.6.0新增)
    v-slot: —> #

    就和 v-bind: 简写为 : 以及 v-on: 简写为 @ 一样,v-slot: 也拥有自己的简写符号 #

    注意:v-slot:要和旧语法做区分
    // ↓ 下面是伪代码
    v-slot: === :slot !== v-slot: ( v-slot: 和 :slot 都是旧语法)

    作用域插槽 (vue 2.6.0有更新)
    注意slot-scope是旧语法,已经废弃,了解但不要学习,避免混淆。

    让使用处的html能够访问分发处的信息很有必要,因此出现了作用域插槽。
    在分发处将需要传递的信息利用属性名+属性值的方式卸载标签上,使用处就可以以通过一个slotProps对象来访问传递的信息。(一般会配合解构语法直接解构对应的key,推荐使用解构语法)

    ↓ Panel.vue

    1. <template id='panel'>
    2. <div class="panel">
    3. <div class="title">
    4. <slot name='s1' msg="分发处的信息" index="1"></slot>
    5. </div>
    6. </div>
    7. </template>

    // ↓ 最基础的使用

    1. <div id="app">
    2. <Panel>
    3. <template v-slot:s1="obj">
    4. <span>信息: {{ obj.msg }} </span>
    5. <span>序号: {{ obj.index }} </span>
    6. </template>
    7. </Panel>
    8. </div>

    // ↓ 实际项目中一般这么写 (插槽的简写# ,属性解构)

    1. <div id="app">
    2. <Panel>
    3. <template #s1="{msg, index}">
    4. <span>信息: {{ msg }} </span>
    5. <span>序号: {{ index }} </span>
    6. </template>
    7. </Panel>
    8. </div>

    再进一步,vue 2.6.0之后支持动态插槽名

    1. <base-layout>
    2. <template v-slot:[dynamicSlotName]>
    3. ...
    4. </template>
    5. </base-layout>

    这一特性可以用于v-for批量渲染。

    关于作用域插槽有一点补充
    使用作用域插槽,如

    1. <template #s1="{msg}">
    2. <span>信息: {{ msg }} </span>
    3. </template>

    v-solt:后面必须有参数,即必须有插槽名称”s1”

    具名插槽有自己定义的名称()。对匿名插槽,插槽名称是default。

    1. <template #default="{msg}">
    2. <span>信息: {{ msg }} </span>
    3. </template>

    完结。