Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Vue router with Vue 3 raises the error "Uncaught TypeError: Object(...) is not a function"

Created a simple Vue project using the CLI:

vue create my-project

Wanted to add two pages, so installed the latest version of vue-router (which is currently v3.4.8) and followed the vue mastery tutorial for routing.

This is what my router.js file looks like:

import { createWebHistory, createRouter } from 'vue-router'
import Home from './components/Home.vue'
import About from './components/About.vue'

const router = createRouter({
  history: createWebHistory(),
  routes: [
    { path: '/', name: 'Home', component: Home },
    { path: '/about', name: 'About', component: About },
  ]
})

export default router

And of course, this is what my main.js file looks like:

import { createApp } from 'vue'
import router from './router'

createApp({
  template: `
  <div>
    <router-link to='/'>Home</router-link>
    <router-link to='/create'>Create</router-link>
  </div>
  `
})
.use(router)
.mount('#app')

Both of the Home and About components don't really have much in them, this is what they look like:

<template>
  <div>TODO: Home</div>
</template>

<script>
  export default {
    name: 'Home'
  }
</script>

Anyway, all of this to say that I am getting the following error on:

Uncaught TypeError: Object(...) is not a function

at eval (router.js?41cb:5)

This is specifically on createRouter

Have I done something wrong?

Edit: as Boussadjra Brahim pointed out, originally createWebHistory was just being passed in without being a function call. I've since updated the code to include this.

Interestingly enough, once that was done, the error is not happening upon it's call.

like image 344
theJuls Avatar asked Oct 28 '20 15:10

theJuls


3 Answers

This issue is caused when you install Vue router 3 with Vue 3 so you should uninstall the current version :

npm uninstall vue-router --save

and install the new one by :

npm i vue-router@next --save

Example

like image 144
Boussadjra Brahim Avatar answered Oct 26 '22 01:10

Boussadjra Brahim


For vue3 you should install the @4 package with the following command:

npm install vue-router@4

Please consult the following migration guide if you're having problems: Migrating from Vue 2

like image 43
Jubei Avatar answered Oct 26 '22 02:10

Jubei


In my case it was the other way round (I was getting the same error), I had vue 2.6 installed and Vue Router 4, so I had to downgrade Vue Router to 3.5

like image 4
Andres Paul Avatar answered Oct 26 '22 02:10

Andres Paul