请输入代码
注重:vue-router 2只适用于Vue2.x版本,下面我们是基于vue2.0讲的怎样运用vue-router 2完成路由功用。
引荐运用npm装置。
npm install vue-router
一、运用路由
在main.js中,须要明白装置路由功用:
import Vue from ‘vue’
import VueRouter from ‘vue-router’
import App from ‘./App.vue’
Vue.use(VueRouter)
1.定义组件,这里运用从其他文件import进来
import index from './components/index.vue'
import hello from './components/hello.vue'
2.定义路由
const routes = [
{ path: '/index', component: index },
{ path: '/hello', component: hello },
]
3.建立 router 实例,然后传 routes 设置
const router = new VueRouter({
routes
})
4.建立和挂载根实例。经由过程 router 设置参数注入路由,从而让全部运用都有路由功用
const app = new Vue({
router,
render: h => h(App)
}).$mount('#app')
经由上面的设置以后呢,路由婚配到的组件将会衬着到App.vue里的<router-view></router-view>
那末这个App.vue里应当如许写:
<template>
<div id="app">
<router-view></router-view>
</div>
</template>
index.html里呢要如许写:
<body>
<div id="app"></div>
</body>
如许就会把衬着出来的页面挂载到这个id为app的div里了。
二、重定向 redirect
const routes = [
{ path: '/', redirect: '/index'}, // 如许进/ 就会跳转到/index
{ path: '/index', component: index }
]
三、嵌套路由
const routes = [
{ path: '/index', component: index,
children: [
{ path: 'info', component: info}
]
}
]
经由过程/index/info就能够访问到info组件了
四、懒加载
const routes = [
{ path: '/index', component: resolve => require(['./index.vue'], resolve) },
{ path: '/hello', component: resolve => require(['./hello.vue'], resolve) },
]
经由过程懒加载就不会一次性把一切组件都加载进来,而是当你访问到谁人组件的时刻才会加载那一个。关于组件比较多的运用会进步初次加载速率。
五、<router-link>
在vue-router 1中,运用的是
在vue-router 2中,运用了<router-link></router-link>替代1版本中的a标签
<!– 字符串 –>
<router-link to="home">Home</router-link>
<!– 衬着效果 –>
<a href="home">Home</a>
<!– 运用 v-bind 的 JS 表达式 –>
<router-link v-bind:to="'home'">Home</router-link>
<!– 不写 v-bind 也能够,就像绑定别的属性一样 –>
<router-link :to="'home'">Home</router-link>
<!– 同上 –>
<router-link :to="{ path: 'home' }">Home</router-link>
<!– 定名的路由 –>
<router-link :to="{ name: 'user', params: { userId: 123 }}">User</router-link>
<!– 带查询参数,下面的效果为 /register?plan=private –>
<router-link :to="{ path: 'register', query: { plan: 'private' }}">Register</router-link>
六、路由信息对象
1.$route.path
字符串,对应当前路由的途径,老是剖析为绝对途径,如 “/foo/bar”。
2.$route.params
一个 key/value 对象,包括了 动态片断 和 全婚配片断,假如没有路由参数,就是一个空对象。
3.$route.query
一个 key/value 对象,示意 URL 查询参数。比方,关于途径 /foo?user=1,则有 $route.query.user == 1,假如没有查询参数,则是个空对象。
4.$route.hash
当前路由的 hash 值 (不带 #) ,假如没有 hash 值,则为空字符串。
5.$route.fullPath
完成剖析后的 URL,包括查询参数和 hash 的完全途径。
6.$route.matched
一个数组,包括当前路由的一切嵌套途径片断的 路由纪录 。路由纪录就是 routes 设置数组中的对象副本(另有在 children 数组)。
综合上述,一个包括重定向、嵌套路由、懒加载的main.js以下:
import Vue from 'vue'
import VueRouter from 'vue-router'
import App from './App'
Vue.use(VueRouter)
const router = new VueRouter({
routes:[
{ path: '/', redirect: '/index' },
{ path: '/index', component: resolve => require(['./components/index.vue'], resolve),
children:[
{ path: 'info', component: resolve => require(['./components/info.vue'], resolve) }
]
},
{ path: '/hello', component: resolve => require(['./components/hello.vue'], resolve) },
]
})
const app = new Vue({
router,
render: h => h(App)
}).$mount('#app')