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

标签 javascript vue.js vue-router vuejs3 vue-router4

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

Component is missing template or render function.


在这里,Home组件导致问题。我们不能传递 component() 的结果吗?到 vue-router 的路由对象?
<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>
查看 codesandbox 中的问题.

最佳答案

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

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

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

关于javascript - Vue.js - 组件缺少模板或渲染功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64409157/

相关文章:

javascript - __doPostBack 在 Chrome 中不起作用

javascript - 多个 html 部分,检查我在哪个部分

javascript - 哪个是在 vue js 中将数据组件传递给组件的最佳方式

git - VueJS 构建部署历史

vue.js - 我们如何在 NUXTJS 中设置默认路由

javascript - 在不使用事件的情况下获取 TextInput 高度

javascript - 引入水平滚动的长导航栏?

javascript - Vue.js 从数组添加类

javascript - 在vuejs中传递 Prop 数据

vue.js - Vue Single page app Router,当我们改变路由时组件会发生什么?