在Vue 3中,我创建了以下Home个组件,另外两个组件(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

Vue.js相关问答推荐

Vuetify从同一方向旋转传送带下一个项目和上一个项目

在 bootstrap-vue 中渲染自定义样式

Vue.js 和观察者模式

我可以在未注册的组件上构建 Vue.js 失败吗?

避免在运行时向 Vue 实例或其根 $data 添加响应式属性

如何在map中添加新的标记 onclick?

即使响应为 200,也会调用 Axios Catch

使用 Vue Js 运行 Jest 测试时出现语法错误:无法在模块外使用 import 语句

Vuetify 在数据表中插入操作按钮并获取行数据

ECMA6 中 nameFunction() {} 和 nameFunction () => {} 的区别

将数据传递给另一条路由上的组件

如何使用 vuejs 从 SPA 访问 /storage -laravel- 中的图像

vuetify:以编程方式显示对话框

Vuejs css 范围性能

如果我刷新我的网页,Vuex store是空的

vue-router如何持久化导航栏?

VueJS 2 在多个组件上debounce

vuex - 即使不推荐,是否可以直接更改状态?

使用 vuejs 动态设置 id 标签

在 Vue 单元测试中单击按钮时触发表单提交