【Vue系列四】—Vue学习历程的知识分享!
前言
本篇讲述Vue中路由的使用
一、路由
-
路由就是一种对应关系
-
之前的后端渲染(存在性能问题)
-
Ajax 前端渲染(性能ok,但是不支持浏览器的前进后退操作)
-
SPA(Single Page Application)单页应用程序:整个网站只有一个页面,内部的变化通过 Ajax 局部更新实现、同时支持浏览器地址栏的前进和后退操作
-
SPA 的原理之一:基于 URL 地址的 hash(hash 的变化会导致浏览器记录访问历史的变化,但是 hash 的变化不会触发新的 URL 请求)
-
在实现 APA 过程中,最核心的技术点就是前端路由
后端路由
-
根据不同的 URL,返回不同的内容
-
URL 地址与服务器资源之间的对应关系
前端路由
-
根据不同的用户事件,显示不同的页面内容
-
用户事件与事件处理函数之间的关系
二、Vue-Router
基本特性
-
支持 HTML5 的历史模式或 hash 模式
-
支持嵌套路由
-
支持路由参数
-
支持编程式路由
-
支持命名路由
基本使用
- 引入相关的库文件
- 添加路由链接
- 添加路由填充位置
- 定义路由组件
- 创建路由实例并配置相关规则
- 把路由挂载到Vue根实例中
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<div id="app">
<!-- step2: 添加路由链接 -->
<router-link to="/user">user</router-link>
<router-link to="/register">register</router-link>
<!-- step3: 添加路由填充位 -->
<router-view></router-view>
</div>
<!-- step1: 引入 -->
<script src="./vue.js"></script>
<script src="./vue-router_3.0.2.js"></script>
<script>
// step4: 定义路由组件
const User = {
template: '<h1>user</h1>'
}
const Register = {
template: '<h1>register</h1>'
};
// step5: 创建路由实例并配置规则
const router = new VueRouter({
routes: [
{
path: '/user',
component: User
},
{
path: '/register',
component: Register
}
]
});
// step6: 把路由挂载到 Vue 实例中
new Vue({
el: '#app',
router
});
</script>
</body>
</html>
路由重定向
用户在访问地址 A 的时候,强制用户跳转到 B,从而展示特定的组件页面!
const router = new VueRouter({
// 所有的路由规则
routes: [
{ path: '/', redirect: '/user' },
{ path: '/user', component: User },
{ path: '/register', component: Register }
]
})
路由嵌套
const router = new VueRouter({
// 所有的路由规则
routes: [
{ path: '/', redirect: '/user' },
{ path: '/user', component: User },
// children 数组表示子路由规则
{
path: '/register', component: Register, children: [
{ path: '/register/tab1', component: Tab1 },
{ path: '/register/tab2', component: Tab2 }
]
}
]
})
动态路由匹配
const router = new VueRouter({
// 所有的路由规则
routes: [
{ path: '/', redirect: '/user' },
{ path: '/user/:id', component: User },
{ path: '/register', component: Register }
]
})
获取动态路由中参数的方式
- $route.params.id
const User = {
template: '<h1>User 组件 -- 用户id为: {{$route.params.id}}</h1>'
}
- 为props指定布尔值
路由规则中开启props传参
const router = new VueRouter({
// 所有的路由规则
routes: [
{ path: '/', redirect: '/user' },
{ path: '/user/:id', component: User, props: true },
{ path: '/register', component: Register }
]
})
const User = {
props: ['id'],
template: '<h1>User 组件 -- 用户id为: {{id}}</h1>'
}
- 为props指定对象
const router = new VueRouter({
// 所有的路由规则
routes: [
{ path: '/', redirect: '/user' },
{ path: '/user/:id', component: User, props: { uname: 'lisi', age: 20 } },
{ path: '/register', component: Register }
]
})
const User = {
props: ['id', 'uname', 'age'],
template: '<h1>User 组件 -- 用户id为: {{id}} -- 姓名为:{{uname}} -- 年龄为:{{age}}</h1>'
}
- 为props指定函数
const router = new VueRouter({
// 所有的路由规则
routes: [
{ path: '/', redirect: '/user' },
{
path: '/user/:id',
component: User,
props: route => ({ uname: 'zs', age: 20, id: route.params.id })
},
{ path: '/register', component: Register }
]
})
const User = {
props: ['id', 'uname', 'age'],
template: '<h1>User 组件 -- 用户id为: {{id}} -- 姓名为:{{uname}} -- 年龄为:{{age}}</h1>'
}
命名路由
为了更加方便的表示路由的路径,可以通过 name 给路由规则起一个别名,即为“命名路由”
const router = new VueRouter({
// 所有的路由规则
routes: [
{ path: '/', redirect: '/user' },
{
// 命名路由
name: 'user',
path: '/user/:id',
component: User,
props: route => ({ uname: 'zs', age: 20, id: route.params.id })
},
{ path: '/register', component: Register }
]
})
编程式导航
- 参数是字符串
this.$router.push('/register')
- 参数是对象
this.$router.push({ path: '/register' })
- 参数是命名路由
// 'user' 是路由配置中的 name,只要 name 对了就能进行路由匹配
this.$router.push({name: 'user', params: {userId: 123}})
- 带查询参数
this.$router.push({path: '/register' query: {uname: 'xxx'}})
有不明白的或者有其他问题的可以评论区留言噢
私信回复JS思维导图可获取完整知识导图~
今天的知识分享就到这里啦~希望大家在这能学到知识一起分享一起进步,成为更好的自己!
原文地址:https://blog.csdn.net/m0_60623820/article/details/142331258
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!