You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Vue.js(Nuxt)中正确使用嵌套具名插槽?(解决ContentDoc插槽与布局具名插槽冲突问题)

如何在Vue.js(Nuxt)中正确使用嵌套具名插槽?(解决ContentDoc插槽与布局具名插槽冲突问题)

It's been a while since I posted a question here. People of StackOverflow, I need your help.

我的代码结构

layouts/page.vue

<template>
  <main class="flex py-10 w-full">
    <AppNavigation />

    <section class="basis-3/4">
      <slot />
    </section>

    <slot name="table-of-contents" />
  </main>
</template>

pages/docs.vue(初始版本)

<script lang="ts" setup>
definePageMeta({
  layout: 'page',
})
</script>

<template>
  <ContentDoc v-slot="{ doc }">
    <aside class="relative basis-1/4">
      <nav class="fixed top-5 right-10 space-y-4">
        <p class="font-serif text-lg">
          On this page:
        </p>

        <AppTableOfContents
          v-if="doc.body?.toc"
          :toc="doc.body.toc.links"
        />
      </nav>
    </aside>

    <ContentRenderer
      class="space-y-4"
      :value="doc"
    />
  </ContentDoc>
</template>

我遇到的问题

我一直尝试把上面的<aside>插入到布局的table-of-contents具名插槽中,但遇到了问题:ContentDoc的插槽优先级似乎高于布局的插槽,导致我的尝试失败。

我已经试过的方法

  • 我用过<Teleport />,但感觉这种方式很生硬,而且在DevTools里会出现hydration error(水合错误)。
  • 我也尝试过用AI工具解决,但没得到有效的方案,所以才来这里提问🙂

尝试的解决方案及报错情况

尝试的代码修改

我尝试了下面的写法,但遇到了问题:

<script lang="ts" setup>
definePageMeta({
  layout: 'page',
})
</script>

<template>
  <ContentDoc v-slot="{ doc }">
    <template #table-of-contents>
      <aside class="relative basis-1/4">
        <nav class="fixed top-5 right-10 space-y-4">
          <p class="font-serif text-lg">
            On this page:
          </p>

          <AppTableOfContents
            v-if="doc.body?.toc"
            :toc="doc.body.toc.links"
          />
        </nav>
      </aside>
    </template>

    <ContentRenderer
      class="space-y-4"
      :value="doc"
    />
  </ContentDoc>
</template>

VSCode警告截图

Code editor warning

运行时错误日志

[3:22:02 PM]  ERROR  Internal server error: Codegen node is missing for element/if/for node. Apply appropriate transforms first.
  Plugin: vite:vue
  File: /home/oyedejioyewole/Workspaces/published/nuxt-bootstrap-icons/docs/pages/docs.vue?macro=true
      at assert (/home/oyedejioyewole/Workspaces/published/nuxt-bootstrap-icons/node_modules/.pnpm/@vue+compiler-core@3.5.13/node_modules/@vue/compiler-core/dist/compiler-core.cjs.js:2042:11)
      at genNode (/home/oyedejioyewole/Workspaces/published/nuxt-bootstrap-icons/node_modules/.pnpm/@vue+compiler-core@3.5.13/node_modules/@vue/compiler-core/dist/compiler-core.cjs.js:3996:7)
      at genNodeList (/home/oyedejioyewole/Workspaces/published/nuxt-bootstrap-icons/node_modules/.pnpm/@vue+compiler-core@3.5.13/node_modules/@vue/compiler-core/dist/compiler-core.cjs.js:3971:7)
      at genNodeListAsArray (/home/oyedejioyewole/Workspaces/published/nuxt-bootstrap-icons/node_modules/.pnpm/@vue+compiler-core@3.5.13/node_modules/@vue/compiler-core/dist/compiler-core.cjs.js:3958:3)
      at genFunctionExpression (/home/oyedejioyewole/Workspaces/published/nuxt-bootstrap-icons/node_modules/.pnpm/@vue+compiler-core@3.5.13/node_modules/@vue/compiler-core/dist/compiler-core.cjs.js:4237:7)
      at genNode (/home/oyedejioyewole/Workspaces/published/nuxt-bootstrap-icons/node_modules/.pnpm/@vue+compiler-core@3.5.13/node_modules/@vue/compiler-core/dist/compiler-core.cjs.js:4033:7)
      at genObjectExpression (/home/oyedejioyewole/Workspaces/published/nuxt-bootstrap-icons/node_modules/.pnpm/@vue+compiler-core@3.5.13/node_modules/@vue/compiler-core/dist/compiler-core.cjs.js:4203:5)
      at genNode (/home/oyedejioyewole/Workspaces/published/nuxt-bootstrap-icons/node_modules/.pnpm/@vue+compiler-core@3.5.13/node_modules/@vue/compiler-core/dist/compiler-core.cjs.js:4027:7)
      at genNodeList (/home/oyedejioyewole/Workspaces/published/nuxt-bootstrap-icons/node_modules/.pnpm/@vue+compiler-core@3.5.13/node_modules/@vue/compiler-core/dist/compiler-core.cjs.js:3971:7)
      at genVNodeCall (/home/oyedejioyewole/Workspaces/published/nuxt-bootstrap-icons/node_modules/.pnpm/@vue+compiler-core@3.5.13/node_modules/@vue/compiler-core/dist/compiler-core.cjs.js:4158:3)

运行时错误截图

Runtime error

备注:内容来源于stack exchange,提问作者Oyedeji

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.14 14:20:28