是一个vue官方出品的 管理组件切换 的 插件
前端路由 (hash路由)
在同一个html页面, 显示不同的内容(组件). 进而建立了URL和组件之间的对应关系
在同一个页面, 借助锚链接
实现同一页面的不同部分的跳转
第一章: http://localhost:5500/index.html#chap1
第二章: http://localhost:5500/index.html#chap2
像#chap1
, #chap2
...这样的锚链接, 也叫做hash路由
也称为前端路由
后端路由
提供接口(数据)服务, 将不同请求方式+url, 映射到处理函数. 建立了URL和处理函数之间的对应关系
Vue三步
VueRouter
改造html
Document
首页
相关
安装
npm i vue-router@3
vue2 安装 vue-router3.x
vue3 安装 vue-router4.x
VueRouter
//最核心的内容,导出VueRouter对象
import Vue from 'vue'
//1. 导入VueRouter
import VueRouter from 'vue-router'
import Home from '../views/Home'
import About from '../views/About'
// debugger //在代码中打断点
//安装插件(注册router-view,router-link组件,在 Vue上挂载 $router, $route)
Vue.use(VueRouter)
//2. 创建路由规则
// 页面级组件(大)放到views,公共组件、小组件放到components
const routes = [
{ path: '/home', component: Home },
{ path: '/about', component: About },
]
//3. 创建VueRouter的实例
const router = new VueRouter({
routes,
})
//4. 导出router实例
export default router
Vue.use(VueRouter)安装插件,在vue-router的install方法中进行:
在Vue上注册router-view、router-link组件
在Vue原型对象上挂载了$router $route
在代码中打断点:debugger
// 导入路由对象
import router from './router'
new Vue({
// 挂载
router,
render: (h) => h(App),
}).$mount('#app')
使用@Vue/cli
工具创建项目时, 构建项目时直接选择router
#/about
hash模式/about
history模式(需要?支持)const routes = [
//设置一级路由
//login-登录页
{ path: '/login', component: () => import('@/views/Login') },
//home-后台首页
{
path: '/home',
component: () => import('@/views/Home'),
//优化三、设置默认重定向
redirect: '/home/article',
children: [
// 不写/,会跟base路由拼接,最终效果/home/article
{ path: 'about', component: () => import('@/views/About') },
{ path: 'user', component: () => import('@/views/User') },
// webpack分包机制/ 路由懒加载,常用,异步路由加载
{ path: 'Article', component: () => import('@/views/Article') },
// 优化一: 提供空的子路由,覆盖路由不匹配的情况
{ path: '', component: () => import('@/views/Article') },
],
},
// 优化二: 默认路由,*要写在最下面
{ path: '*', component: () => import('@/views/NotFound') },
]
$router
表示路由对象
路由规则对象
路由规则对象
(push, replace, go)路由对象上的routes
数组, 构成了路由规则$route
参数
query
$route.path 对应 router/index.js
中定义的路由规则
获取到user的id //localhost:8080/user?id=3 3
{{ $route.params.id }}
methods: {
handleClick() {
this.$router.params.id
},
},
a
元素tag
属性, 渲染为任意元素
显示Todo组件
显示Article组件
显示Todo组件
显示Article组件
一级路由出口
二级路由出口
导航
router----编程式导航
vue-router
两种方法
router-link
实现导航$router
路由器的方法, 以js代码的方式进行导航前进
后退
按钮进行操作
methods: {
handleClick() {
// 导航到/todo组件
console.log(this.$route) // 保存当前的URL
if (this.$route.path != '/todo') {
this.$router.push('/todo')
}
},
},
/login
/article
/user
分析:
vue create admin-demo
选择 Babel 与Router
const routes = [
//设置一级路由
//login-登录页
{ path: '/login', component: () => import('@/views/Login') },
//home-后台首页
{
path: '/home',
component: () => import('@/views/Home'),
//优化三、设置默认重定向
redirect: '/home/article',
children: [
// 嵌套路由不要写 /,否则会匹配到根路由base路由,写/是 /about, 不写是 /home/about
{ path: 'about', component: () => import('@/views/About') },
{ path: 'user', component: () => import('@/views/User') },
// webpack分包机制/ 路由懒加载,常用,异步路由加载
{ path: 'Article', component: () => import('@/views/Article') },
// 优化一: 提供空的子路由,覆盖路由不匹配的情况
{ path: '', component: () => import('@/views/Article') },
],
},
// 优化二: 默认路由,*要写在最下面
{ path: '*', component: () => import('@/views/NotFound') },
]
一级路由出口
二级路由出口
1:默认路由,* 要写在最下面
2:默认重定向
当访问后台首页时, 默认显示某一种信息(通常, 指定一个二级路由)
3:webpack分包机制/ 路由懒加载,常用,异步路由加载
编程式的导航
进行页面跳转(组件的切换)动态路由参数
(或localStorage) 进行兄弟组件间的带参跳转使用router-link渲染li元素, 使其具体点击切换功能
作用:
校验权限
守护组件
扩展:
jwt,用token来解析身份信息,控制登录
//设置全局前置导航守卫(url切换时执行)
router.beforeEach((to, from, next) => {
// to:到哪个个path去, from: 从哪个path来
let isLogin = localStorage.getItem('isLogin')
// 只要用户处于登录状态,直接进入到home首页
// 如果访问的是'/login',直接进入/home页
// 如果访问的不是'/login',直接调用next() 放行
if (isLogin) {
if (to.path == '/login') {
next('/home')
} else {
next()
}
} else {
if (to.path == '/login') {
next()
} else {
// elementUI提供消息提示框
// $message挂在Vue的原型对象上。Vue的实例可以直接访问,但Vue需要通过prototype访问
// Message.error('请先登录')
Vue.prototype.$message({
message: '请先登录',
type: 'warning',
showClose: true,
duration: 1000,
})
// alert('请先登录')
next('/login')
}
}
})
export default router