Vue生态中的一员大将Vue-router,负责管理页面路由,本节介绍路由模式、嵌套路由及路由参数传递。
路由
创建index.js,引入createRouter和createWebHistory方法
1
| import { createRouter, createWebHistory } from 'vue-router'
|
声明一个routes变量
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| import Home from '../views/Home.vue'
const routes = [ { path: '/', name: 'Home', component: Home }, { path: '/about', name: 'About', component: () => import('../views/About.vue') } ]
|
创建router实例
1 2 3 4
| const router = createRouter({ history: createWebHistory(process.env.BASE_URL), routes })
|
暴露接口
在main.js中引入
1 2 3
| import router from './router'
createApp(App).use(router).mount('#app')
|
在页面中利用<router-link>
标签创建路由,会自动渲染成<a>
标签
1 2 3 4
| <router-link to="/">Home</router-link>
<router-view/>
|
激活路由的样式,默认为该样式
1 2 3
| #nav a.router-link-exact-active { color: #42b983; }
|
可通过active-class
属性改变
1
| <router-link active-class="active" to="/">Home</router-link>
|
路由模式
Hash
:vue-router默认使用该模式,该模式使用URL的hash值来作为路由,用来指导浏览器动作,对服务端完全无用,支持所有浏览器
引入
1 2 3 4 5 6
| import { createRouter, createWebHashHistory } from 'vue-router'
const router = createRouter({ history: createWebHashHistory(process.env.BASE_URL), routes })
|
History
:创建一个 HTML5
历史,即单页面应用程序中最常见的历史记录。应用程序必须通过 http
协议被提供服务。
Abstract
:支持所有JavaScript运行模式,若发现没有浏览器的API,路由会自动强制进入这个模式
嵌套路由
在路由的index.js中
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
| const routes = [ { path: '/', name: 'Home', component: Home }, { path: '/about', name: 'About', component: () => import('../views/About.vue'), children: [ { path: '', component: () => import('../views/Order') }, { path: 'order', name: 'Order', component: () => import('../views/Order') }, { path: 'setting', name: 'Setting', component: () => import('../views/Setting') } ] } ]
|
在页面中
1 2 3 4 5 6 7
| <div class="menu"> <li><router-link to="/about/order">我的订单</router-link></li> <li><router-link to="/about/setting">个人设置</router-link></li> </div> <div class="content"> <router-view/> </div>
|
路由参数传递
params类型
带参数的路由定义
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| const routes = [ { path: '/', name: 'Home', component: Home }, { path: '/about', name: 'About', component: () => import('../views/About.vue'), children: [ { path: 'page/:id', component: () => import('../views/Page') } ] } ]
|
传递参数
1 2 3 4 5
| <ul> <li v-for="item in articles"> <router-link :to="'/about/page/'+item.id">{{ item.title }}</router-link> </li> </ul>
|
获取参数
1 2
| 文章ID:{{ $route.params.id }}
|
也可以用计算属性的方式获取
1 2 3 4 5 6 7 8 9
| export default { name: "Page", computed: { pageid() { return this.$route.params.id } } }
|
query类型
路由定义用传统方式
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| const routes = [ { path: '/', name: 'Home', component: Home }, { path: '/about', name: 'About', component: () => import('../views/About.vue'), children: [ { path: 'article', component: () => import('../views/Article') } ] } ]
|
传递参数
1 2 3 4 5 6
| <ul> <li> <router-link :to="{path:'/about/article', query:{name:'zhang',age:20}}">文章二</router-link> </li> </ul>
|
1 2
| <button @click="$router.push({path:'/about/article',query:{name:'sun',age:19}})">文章三</button>
|
获取参数
1 2
| 姓名:{{ $route.query.name }} 年龄:{{ $route.query.age }}
|