Vue.js - 组件缺少模板或渲染功能

新手上路,请多包涵

在 Vue 3 中,我创建了以下 Home 组件,另外 2 个组件( FooBar ),并将其传递给 vue-router 如下图所示。 Home 组件是使用 Vue 的 component 函数创建的,而 FooBar 组件是使用普通对象创建的。

我得到的错误:

Component is missing template or render function.

在这里, Home 组件导致了问题。我们不能将 --- 的结果传递给 vue-router component() 的路由对象吗?

 <div id="app">
   <ul>
      <li><router-link to="/">Home</router-link></li>
      <li><router-link to="/foo">Foo</router-link></li>
      <li><router-link to="/bar">Bar</router-link></li>
   </ul>
   <home></home>
   <router-view></router-view>
</div>

<script>
   const { createRouter, createWebHistory, createWebHashHistory } = VueRouter
   const { createApp } = Vue
   const app = createApp({})

   var Home = app.component('home', {
      template: '<div>home</div>',
   })

   const Foo = { template: '<div>foo</div>' }
   const Bar = { template: '<div>bar</div>' }

   const router = createRouter({
      history: createWebHistory(),
      routes: [
        { path: '/', component: Home },
        { path: '/foo', component: Foo },
        { path: '/bar', component: Bar },
      ],
    })

    app.use(router)

    app.mount('#app')
</script>

请参阅 代码沙箱 中的问题。

原文由 Circuit Breaker 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 3.8k
2 个回答

app.component(...) 提供定义对象(第二个参数)时,它返回应用程序实例(以允许链接调用)。要获取组件定义,请省略定义对象并仅提供名称:

 app.component('home', { /* definition */ })
const Home = app.component('home')

const router = createRouter({
  routes: [
    { path: '/', component: Home },
    //...
  ]
})

演示

原文由 tony19 发布,翻译遵循 CC BY-SA 4.0 许可协议

对于 vue-cli vue 3

createApp 中缺少渲染功能。使用 createApp 函数设置您的应用程序时,您必须包含包含 App 的渲染函数。

在 main.js 中更新为:

首先将 javascript 中的第二行更改为:-

 const { createApp } = Vue

到以下几行:

 import { createApp,h } from 'vue'
import App from './App.vue'

第二

更改自:-

 const app = createApp({})

至:

 const app  = createApp({
    render: ()=>h(App)
});

app.mount("#app")

原文由 Ismail Omar 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题