[Vue] slot、slot-scope与v-slot

2022-06-11  本文已影响0人  青城墨阕

一、slot是什么

二、使用场景

通过插槽可以拓展组件,去更好地复用组件和对其做定制化处理。
例:父组件使用到一个复用组件,但是该组件在不同的地方有少量的区别,若单独为了这不同的地方重写一个组件显然在成本方面是有浪费的,此时我们就可以使用插槽的方式进行设计。
比如布局组件、表格列、下拉选、弹框显示内容等...

三、slot的分类

四、slot的使用方式

1. vue2.0的使用方式

子组件中定义时:
<!-- Child.vue -->
<template>
  <div>
    <!-- 默认插槽 -->
    <main>
        <slot>
            <h3>没传内容</h3>
        </slot>
    </main>

    <!-- 具名插槽 -->
    <header>
        <slot name="header">
            <h3>没传header插槽</h3>
        </slot>
    </header>

    <!-- 作用域插槽 -->
    <footer>
        <slot name="footer" testProps="子组件的值">
            <h3>没传footer插槽</h3>
        </slot>
    <footer>
  </div>
</template>

<style scoped>
div {
    border: 1px solid #000;  
}
</style>

父组件中在使用时:
<!-- Parent.vue -->
<child>
  <!-- 默认插槽 -->
  <div>默认插槽</div>  
  <!-- 具名插槽 -->
  <div slot="header">具名插槽header</div>
  <!-- 作用域插槽 -->
  <div slot="footer" slot-scope="slotProps">
    {{slotProps.testProps}}
  </div>
</child>
渲染结果
渲染结果

2. vue3.0的使用方式

在vue2.6中,上述的API被软废弃(3.0正式废弃),取而代之的是内置指令v-slot,可以缩写为【#】

子组件用法保持不变,父组件中
<!-- Parent.vue -->
<template >
    <child>
        <!--默认插槽-->
        <template v-slot>
            <div>默认插槽</div>
        </template>

        <!--具名插槽-->
        <template #header>
            <div>具名插槽</div>
        </template>

        <!--作用域插槽-->
        <template #footer="slotProps">
            <div>
                {{slotProps.testProps}}
            </div>
        </template>
    <child>
</template>
上一篇 下一篇

猜你喜欢

热点阅读