Nuxt.js 找不到有错误的组件 "Failed to mount component: template or render function not defined."

Nuxt.js could not found component with errors "Failed to mount component: template or render function not defined."

我的 Nuxt.js 网站有问题。 我定义了一个页面,带有动态 slug 参数,如下所示:

/solutions/:slug

如果我直接在浏览器中访问该页面,它会正确加载! 但是,如果我在我的 NavBar 组件中单击 nuxt-link,我会在控制台中收到以下错误,并且页面不会加载:

vue.runtime.esm.js?2b0e:619

[Vue warn]: Failed to mount component: template or render function not defined.

found in

---> <Anonymous>
       <Nuxt>
         <Layouts/default.vue> at layouts/default.vue
           <Root>

我有一个默认布局文件,如下所示:

layouts/default.vue

<template>
  <div>
    <NavBar />
    <Nuxt />
  </div>
</template>

<script>
import NavBar from "~/components/Layout/NavBar"

export default {
  components: {
    NavBar,
  },
}
</script>

我的导航栏包含以下 nuxt-link:

components/Layout/NavBar.vue

<template>
  <b-navbar wrapper-class="container" fixed-top>
    <template slot="end">

      <nuxt-link
        :to="{
          name: 'solutions-slug',
          params: { slug: 'performance' },
        }"
        class="navbar-item"
        target="self"
      >
        <span class="icon is-medium">
          <i class="ic ic--larger ic-b1-graph-bars-chart-rise" />
        </span>
        <span class="label">
          Performance
        </span>
      </nuxt-link>

    </template>
  </b-navbar>
</template>

我有一个页面,由 slug 参数定义:

pages/solutions/_slug.vue

<template>
  <div class="solution">
    This is my solution page.
  </div>
</template>

我试图理解为什么单击 nuxt-link 无法加载页面,即使我在浏览器中正确看到 URL 更改。

谢谢

在 v2.13 版本之后,Nuxt 可以 auto-import 在您的模板中使用您的组件。 检查 nuxt.config.js 如果 components 属性为 true 那么你不需要在 .vue 文件中导入你的组件。

在你的 layouts/default.vue 中删除脚本标签 ;-)

<template>
  <div>
    <NavBar />
    <Nuxt />
  </div>
</template>

如果您需要按文件夹对组件进行分类,请执行以下操作。

转到 nuxt.config.js 并更改您的组件属性

export default {
  components: {
    dirs: [
      '~/components',
      {
        path  : '~/components/site/',
        prefix: 'Site'
      },
      {
        path  : '~/components/admin',
        prefix: 'Admin'
      },
      {
        path  : '~/components/admin/sub',
        prefix: 'AdminSub'
      }
    ]
  }
}

例如,我们有这些组件:

components
  | site
     - header
  | admin
     - header
     - footer
     | sub
        - header
        - footer

当我们需要调用组件时,只需将前缀和组件名称用破折号或驼峰式分隔即可。

在你的 layouts/default.vue 中删除脚本标签 ;-)

<template>
  <div>

   <!-- with dash -->
   <site-header></site-header>
   <admin-header></admin-header>
   <admin-sub-header></admin-sub-header>


   <!-- cammel -->
   <SiteHeader></SiteHeader>
   <AdminHeader></AdminHeader>
   <AdminSubHeader></AdminSubHeader>

  </div>
</template>

Attention: For Root Components /components/nav.vue, We Must Use CammelCase <Nav/> and if we call this component like this <nav/> it doesn't work.

问题可能与上述任何内容都无关。

首先,请检查您的配置是否正确。我看到您正在使用 'nuxtjs/content' 模块,所以您可能也在使用 Contentful。我以前也遇到过类似的情况('Failed to mount component: template or render function not defined'问题),是因为我用来存储变量的'dotenv'模块安装不正确。

在我的例子中,应用程序没有从 .env 文件加载变量。结果,他们不明就里的去了Contentful客户端,导致了js错误。由于某种原因,这个错误并不总是出现在控制台中。相反,above-mentioned 警告出现了。

确保您正确安装了 'dotenv' 模块(如果您使用它)。我记得在我的例子中,有必要安装 'nuxtjs/dotenv' 而不是通常的 dotenv。

如果是这种情况,请告诉我。祝你好运