Vue-router路由快速教程
为什么要使用Router(路由)?
由于Vue中是动态生成的页面,所以在链接上不可以使用url来进行跳转,这时跳转应该使用Router功能.
官方简绍
Vue Router 是 Vue.js官方的路由管理器。它和 Vue.js 的核心深度集成,让构建单页面应用变得易如反掌。包含的功能有:
- 嵌套的路由/视图表
- 模块化的、基于组件的路由配置
- 路由参数、查询、通配符
- 基于 Vue.js 过渡系统的视图过渡效果
- 细粒度的导航控制
- 带有自动激活的 CSS class 的链接
- HTML5 历史模式或 hash 模式,在 IE9 中自动降级
- 自定义的滚动条行为
所以VueRouter主要功能是做页面导航,用来控制页面之间的跳转的
Vue-Router 官方文档:https://router.vuejs.org/zh/installation.html
开始入门
1.在项目中安装vue-router(如果使用脚手架构建vue项目时安装了router的话可以跳过)
npm install vue-router --save-dev
//cnpm install vue-router --save-dev
2.在src下新建router文件夹,并创建index.js文件进行配置Router. (‘index.js’为Vue默认下的router文件)
import Vue from 'vue'
import VueRouter from 'vue-router'
/*导入相关组件*/
import Content from '../components/Content'
import IndexPage from '../components/Index'
//安装路由
Vue.use(VueRouter);
//配置导出路由
export default new VueRouter({
routes:[
{
//路由路径 相当于Spring中的@RequestMapping
path:'/content',
name:'content',
//跳转的组件
component: Content
},
{
path:'/main',
name:'main',
component: IndexPage
}
...
]
});
注意:使用import引入component的话,会导致其项目打包时路由里的所有component都会打包在一个js中,造成进入首页时,需要加载的内容过多,时间相对比较长。
当你用require这种方式引入的时候,会将你的component分别打包成不同的js,加载的时候也是按需加载,只用访问这个路由网址时才会加载这个js。
resolve => require(['../components/Index'], resolve),
{
// 进行路由配置,规定'/'引入到home组件
path: '/',
component: resolve => require(['../components/Index'], resolve),
meta: {
title: 'home'
}
3.在入口main.js文件下导入,配置router
import Router from './router' //Vue默认配置下会自动扫描router下的index文件
new Vue({
el: '#app',
//配置路由
router:Router,
...
})
4.在显示Vue下进行使用Router
<template>
<div id="app">
<H1>ONEREPULIC OF THE POP ARTISTS FROM UNITED STATES OF AMERICA</H1>
<!-- 设置Router超链接,相当于a -->
<router-link to="/content">CONTENT</router-link>
<router-link to="/main">INDEX</router-link>
<!-- 展示Router内容 -->
<router-view></router-view>
</div>
</template>
<script>
export default {
name: 'App',
}
</script>
<router-link>:进行设置路由链接 <router-view>:进行展示路由内容
在方法中进行路由转发跳转导航:
// 使用vue-router路由到指定页面,该方式叫做编程式导航
this.$router.push("/main");
路由嵌套
在一个页面中部分切换显示内容,而不跳转新页面. 做到局部刷新,则可以使用Vue-router的路由嵌套方法. 如导航栏点击切换主内容,页面局部刷新,导航栏部分不变,主内容改变.
...
<el-submenu index="1">
<template slot="title"><i class="el-icon-message"></i>用户管理</template>
<el-menu-item index="1-1">
<!-- 设置路由跳转链接 -->
<router-link to="/user/profile">个人信息</router-link>
</el-menu-item>
<el-menu-item index="1-2">
<!-- 设置路由跳转链接 -->
<router-link to="/user/list">用户列表</router-link>
</el-menu-item>
</el-submenu>
...
<el-main>
<!-- 在该部分进行路由显示 -->
<router-view />
</el-main>
在路由配置文件下:
routes:[
...
{
path:'/main',
component: resolve => require(['../views/Main.vue'],resolve),
// 嵌套路由,做到局部刷新
children:[
{
path:'/user/profile',
component: resolve => require(['../views/user/Profile.vue'],resolve)
},
{
path:'/user/list',
component: resolve => require(['../views/user/List.vue'],resolve)
},
]
},
...
]
路由参数传递
路由跳转时,可以传递参数.
<router-link :to="{name:'UserProfile',params:{id:23}}">个人信息</router-link>
在路由配置中:
{
path:'/main',
component: resolve => require(['../views/Main.vue'],resolve),
// 嵌套路由
children:[
{
// 后续添加:参数名,以实现参数传递
path:'/user/profile:id',
//定义其路由名
name:'UserProfile',
component: resolve => require(['../views/user/Profile.vue'],resolve)
},
{
path:'/user/list',
component: resolve => require(['../views/user/List.vue'],resolve)
}
v-bind:to=”{name:’路由名(在配置中定义)’,params:{参数名:参数值}}”
<font color="red">--但会在地址中 会暴露参数值 --</font>
1.通过路由直接获取参数值
在传递后的页面中显示:
<template>
<div>
<h1>个人信息</h1>
{{$route.params.id}}
</div>
</template>
使用进行提取出参数值
注意:在Vue中声明其template下只能存在一个根元素,不能存在一个以上的元素.
2.通过props进行获取参数
在路由配置中:
{
path:'/user/profile:id',
name:'UserProfile',
component: resolve => require(['../views/user/Profile.vue'],resolve),
// 设置其允许接收属性值
props:true
}
在传递后的页面中显示:
<div>
<h1>个人信息</h1>
{{id}}
</div>
<script>
export default {
// 获取其传递的值
props:['id'],
name: "UserProfile"
}
</script>
路由重定向
使用Vue-Router可以将转发页面进行重定向.
在路由配置中:
{
path:'/goHome',
// 跳转页面进行重定向
redirect:'/main'
}