Javascript Vue.js中真正嵌套的组件?

Javascript Vue.js中真正嵌套的组件?,javascript,components,custom-component,vue.js,Javascript,Components,Custom Component,Vue.js,是否可以使用Vue.js创建语义嵌套的元素 例如:假设我正在构建一个“手风琴”元素。手风琴由“标题”和“内容”部分组成。通过单击标题,可以在视图中切换内容。这样的元素的最终html如下所示: <div class="accordion"> <div class="heading"> My Accordion </div> <div class="content"> Accordions are

是否可以使用Vue.js创建语义嵌套的元素

例如:假设我正在构建一个“手风琴”元素。手风琴由“标题”和“内容”部分组成。通过单击标题,可以在视图中切换内容。这样的元素的最终html如下所示:

<div class="accordion">
    <div class="heading">
        My Accordion
    </div>
    <div class="content">
        Accordions are fun! Loren ipsum dolor sit amet.
        This can be extensive text, include pictures, etc.
    </div>
</div>
<accordion>
    <heading>My Accordion</heading>
    <content>
        Accordions are fun! Loren ipsum dolor sit amet.
        This can be extensive text, include pictures, etc.
    </content>
</accordion>
<app>
    <app-header></app-header>
    <app-footer></app-footer>
</app>
<div id="app">
  <h5>Accordion test</h5>
  <accordion>
    <heading slot="heading">Heading Text</heading>
    <content slot="content">Content Text</content>
  </accordion>

<template id="accordion">
  <div class="header">
    <slot name="heading"></slot>
  </div>
  <div class="content">
    <slot name="content"></slot>
  </div>
</template>

<template id="heading">
  <div class="template-heading">
    <slot></slot>
  </div>
</template>

<template id="content">
  <div class="template-content">
    <slot></slot>
  </div>
</template>
</div>
不幸的是,它不起作用。我已经阅读了几次官方文档,在“组件”部分,当它谈到
元素时,似乎表明我们应该能够做到这一点-但我一生都不知道如何。。。文档实际上提到了一个具有如下结构的元素:

<div class="accordion">
    <div class="heading">
        My Accordion
    </div>
    <div class="content">
        Accordions are fun! Loren ipsum dolor sit amet.
        This can be extensive text, include pictures, etc.
    </div>
</div>
<accordion>
    <heading>My Accordion</heading>
    <content>
        Accordions are fun! Loren ipsum dolor sit amet.
        This can be extensive text, include pictures, etc.
    </content>
</accordion>
<app>
    <app-header></app-header>
    <app-footer></app-footer>
</app>
<div id="app">
  <h5>Accordion test</h5>
  <accordion>
    <heading slot="heading">Heading Text</heading>
    <content slot="content">Content Text</content>
  </accordion>

<template id="accordion">
  <div class="header">
    <slot name="heading"></slot>
  </div>
  <div class="content">
    <slot name="content"></slot>
  </div>
</template>

<template id="heading">
  <div class="template-heading">
    <slot></slot>
  </div>
</template>

<template id="content">
  <div class="template-content">
    <slot></slot>
  </div>
</template>
</div>

……但它并没有给出简单、具体的例子来说明如何做到这一点

信息从父元素传递到子元素的方式令人困惑,我一直无法在网上找到任何教程来演示如何设置这样的嵌套元素。非常感谢您的指导。

那么
也应该是Vue组件吗

那么它应该是这样的:

<div class="accordion">
    <div class="heading">
        My Accordion
    </div>
    <div class="content">
        Accordions are fun! Loren ipsum dolor sit amet.
        This can be extensive text, include pictures, etc.
    </div>
</div>
<accordion>
    <heading>My Accordion</heading>
    <content>
        Accordions are fun! Loren ipsum dolor sit amet.
        This can be extensive text, include pictures, etc.
    </content>
</accordion>
<app>
    <app-header></app-header>
    <app-footer></app-footer>
</app>
<div id="app">
  <h5>Accordion test</h5>
  <accordion>
    <heading slot="heading">Heading Text</heading>
    <content slot="content">Content Text</content>
  </accordion>

<template id="accordion">
  <div class="header">
    <slot name="heading"></slot>
  </div>
  <div class="content">
    <slot name="content"></slot>
  </div>
</template>

<template id="heading">
  <div class="template-heading">
    <slot></slot>
  </div>
</template>

<template id="content">
  <div class="template-content">
    <slot></slot>
  </div>
</template>
</div>
因此:

  • 元素的内容进入
    的模板

  • 整个
    模板进入
    模板内的
    ,谢谢您的建议。关于这个问题,在for Vue中有一个很长的讨论。您的变通方法是可用的,但打破了标题和内容元素的模块化,并产生了不必要的复杂和复杂的html(如问题跟踪程序中的讨论所述),这并不理想。希望通过讨论可以解决这个问题,这样在Vue中构建更复杂的嵌套元素就更容易了。