Vue 实现了一套内容分发的 API,这套 API 的设计灵感源自 Web Components 规范草案,将 <slot> 元素作为承载分发内容的出口。

    1. // 布局组件
    2. <template>
    3. <div class='layout'>
    4. // name用于匹配插槽 slot接参
    5. <slot name='header' :slotProps='slotProps'>
    6. {{slotProps}}
    7. </slot>
    8. // 没有name默认为default
    9. <slot></slot>
    10. <slot name='footer'>
    11. // 可在插槽中放入默认值,在不指定此插槽时,默认显示默认值
    12. 这是头部插槽
    13. </slot>
    14. </div>
    15. </template>
    16. <script>
    17. export default {
    18. name: 'Layout'
    19. }
    20. </script>
    21. <style>
    22. </style>
    23. // 使用插槽
    24. <template>
    25. <div class='home'>
    26. <Layout>
    27. // 用template模板v-slot指令匹配所对应的name的插槽
    28. // slot
    29. <template v-slot:header='slotProps'>头部</template>
    30. // 不指定v-slot,默认defualt
    31. <template>主体</template>
    32. // 不写插槽则不会显示或显示插槽的原本默认值
    33. //footer
    34. </Layout>
    35. </div>
    36. </template>
    37. <script>
    38. import Layout from './Layout';
    39. export default {
    40. name: 'Home',
    41. components: {
    42. Layout,
    43. },
    44. data() {
    45. return {
    46. slotProps: '123'
    47. }
    48. },
    49. }
    50. </script>
    51. <style>
    52. </style>