Vue命名的插槽在包装时不起作用

Ste*_*n-v 2 vue.js vue-component vuejs2

我有一个响应式菜单组件,我想在我的模板标记中使用命名的插槽:

<template>
    <div class="responsive-menu">
        <div class="menu-header">
            <slot name="header"></slot>
        </div>
    </div>
</template>
Run Code Online (Sandbox Code Playgroud)

每当我像这样尝试我的命名插槽时,它工作得非常好:

<responsive-menu>
    <h3 slot="header">Responsive menu header</h3>
</responsive-menu>
Run Code Online (Sandbox Code Playgroud)

然而,只要我用课程包装它就不会再出现了.

<responsive-menu>
    <div class="container">
        <h3 slot="header">Responsive menu header</h3>
    </div>
</responsive-menu>
Run Code Online (Sandbox Code Playgroud)

这里发生了什么?我不应该只能包装命名组件吗?我的命名插槽看起来需要是我的Vue组件的直接子节点?

don*_*teo 6

它不起作用,因为你的"包装槽"不是响应式菜单标签的直接子.

尝试这样的事情:

<responsive-menu>
    <div class="container" slot="header">
        <h3>Responsive menu header</h3>
    </div>
</responsive-menu>
Run Code Online (Sandbox Code Playgroud)

的jsfiddle

  • 插槽不需要是直接的孩子. (3认同)
  • 如果slot不是direct child,则忽略slot属性,并将组件标记的ENTIRE内容用作组件模板标记中的默认槽的内容. (3认同)