# Vue项目添加Router
# 一、安装
在使用 vue-cli3.0 搭建Vue项目时,会有提示安装 vuex router等选项,可以直接选择。
npm install vue-router
# 二、添加router
1、创建router文件
在src目录下创建router文件来添加router实例。
// router/index.js
import Vue from 'vue'
import Router from 'vue-router'
// hack router push callback
const originalPush = Router.prototype.push
Router.prototype.push = function push (location, onResolve, onReject) {
if (onResolve || onReject) return originalPush.call(this, location, onResolve, onReject)
return originalPush.call(this, location).catch(err => err)
}
// 引入路由
const IndexComponent = () => import(/* webpackChunkName: 'indexs' */ '@/views/index/index.vue')
Vue.use(Router)
export default new Router({
mode: 'history',
base: process.env.BASE_URL,
routes: [
{
path: '/index',
name: 'index',
component: IndexComponent
}
]
})
注册到Vue实例上:
// main.js
import Vue from 'vue'
import App from './App.vue'
import router from './router'
new Vue({
router,
render: h => h(App)
}).$mount('#app')
拆分模块
如果路由过大,可以进行路由拆分,就是单纯的把路由 routes 数组拆分开到不同文件中去。
在src目录下创建 router 文件夹:
└── src
├── main.js
└── router # router文件
├── index.js # 我们组装模块并导出 router 的地方
├── a.js # 模块a
└── b.js # 模块b
a模块:
// a.js
const A1Component = () => import(/* webpackChunkName: 'a' */ '@/views/a1/a1.vue')
const A2Component = () => import(/* webpackChunkName: 'a' */ '@/views/a2/a2.vue')
export default [
{
path: '/a1',
name: 'a1',
component: A1Component
},
{
path: '/a2',
name: 'a2',
component: A2Component
}
]
b模块:
// b.js
const B1Component = () => import(/* webpackChunkName: 'b' */ '@/views/b1/b1.vue')
const B2Component = () => import(/* webpackChunkName: 'b' */ '@/views/b2/b2.vue')
export default [
{
path: '/b1',
name: 'b1',
component: B1Component
},
{
path: '/b2',
name: 'b2',
component: B2Component
}
]
合并到index.js文件:
// index.js
import Vue from 'vue'
import Router from 'vue-router'
import a from './a.js'
import b from './b.js'
const IndexComponent = () => import(/* webpackChunkName: 'indexs' */ '@/views/index/index.vue')
Vue.use(Router)
export default new Router({
mode: 'history',
base: process.env.BASE_URL,
routes: [
{
path: '/index',
name: 'index',
component: IndexComponent
},
...a,
...b
]
})
# 三、使用
# 1、在组件中使用
在vue中直接通过this来进行调用。
export default {
created() {
console.log(this.$route) // 路由元信息
},
methods: {
routerLink() {
this.$router.push({
name: 'Home',
params: {}
query: {}
})
}
}
}
# 2、在 js引入使用
与vuex一样,直接引入router实例就可以调用路由方法了。
// test.js
import router from '@/router'
router.beforeEach((to, from, next) => {
console.log(to)
next()
})
router.afterEach(() => {
})