Reputation: 1203
I'm trying to write my first Vuejs app. I'm using vue-cli
and simple-webpack boilerplate.
When I add vue-router
links to my app component I get this error in console
Error in render function: "TypeError: Cannot read property 'matched' of undefined"
Here is my code:
App.vue
<template>
<div>
<h2>Links</h2>
<ul>
<router-link to='/'>Home</router-link>
<router-link to='/query'>Query</router-link>
<router-view></router-view>
</ul>
</div>
</template>
<script>
export default {}
</script>
main.js
import Vue from 'vue'
import VueRouter from 'vue-router'
Vue.use(VueRouter)
import routes from './routes.js'
import App from './App.vue'
const app = new Vue({
el: '#app',
routes,
render: h => h(App)
})
routes.js
import VueRouter from 'vue-router';
let routes=[
{
path: '/',
component: require('./Components/Home.vue')
},
{
path: '/query',
component: require('./Components/Query.vue')
}
];
export default new VueRouter({routes});
Upvotes: 36
Views: 54763
Reputation: 269
I have faced with this issue same as you. Then I realized at the end of the index.js that I forgot to add :
export default router
Then it solves the issue in my case.
Upvotes: 0
Reputation: 2849
If you put some customized codes in router/index.js, make sure you still export default router at the end.
const router = new Router({
mode: 'history'
});
export default router;
Upvotes: 0
Reputation: 402
Just to add my typo that caused this. I forgot the {} on the import
import { router } from './routes.js' //correct
import router from './routes.js' //causes same error
Upvotes: 0
Reputation: 1
Adding to this, if you are putting the routes in the same page instead of importing it, It must be declared before the Vue component render.
Like this:-
const router = new VueRouter({
mode: 'history',
routes:[
{ path: '/dashboard', component: Dashboard},
{ path: '/signin', component: Signin}
]
});
new Vue({
el: '#app',
router,
render: h => h(App)
})
Not like this :
new Vue({
el: '#app',
router,
render: h => h(App)
})
const router = new VueRouter({
mode: 'history',
routes:[
{ path: '/dashboard', component: Dashboard},
{ path: '/signin', component: Signin}
]
});
Upvotes: 0
Reputation: 12136
name must be
router
https://stackoverflow.com/a/44618867/5934465
OK
import
default module no need{}
!
Upvotes: 2
Reputation: 496
On my Vue file I had the following code:
Then, I modified my app.js file, and place the following code:
import router from './Router/router.js'
const app = new Vue({
el: '#app',
router
});
Upvotes: 2
Reputation: 82439
The name when you add it to Vue must be router
.
import router from './routes.js'
const app = new Vue({
el: '#app',
router,
render: h => h(App)
})
If, for whatever reason, you want to call the variable routes
you could assign it this way.
import routes from './routes.js'
const app = new Vue({
el: '#app',
router: routes,
render: h => h(App)
})
Upvotes: 100