vue-router3 的基本使用
- 引入
vue-router。 - 在Vue实例中注册路由组件。
- 规定一些路由规则,即路由与组件的对应关系。
- 创建VueRouter实例,即
router对象,并为vueRouter添加路由规则 - 在创建Vue实例的过程中注册router对象
vue-router暴露的router-view组件,是组件的占位符,当路由匹配时,vue-router加载的组件会替换router-viewvue-router暴露的router-link组件,用于创建链接。
router/index.js
1 | import Vue from 'vue' |
main.js
1 | import Vue from 'vue' |
App.vue
1 | <template> |
vue-router4的基本使用
在vue3中使用vue-router4
- 引入
vue-router的createRouter方法及createWebHistory方法。 - 规定一些路由规则,即路由与组件的对应关系。
- 创建router实例,并为router添加路由规则
- 在创建Vue实例的过程中注册router对象
vue-router暴露的router-view组件,是组件的占位符,当路由匹配时,vue-router加载的组件会替换router-viewvue-router暴露的router-link组件,用于创建链接。
router.js
1 | //1.引入vue-router的createRouter方法及createWebHistory方法 |
main.js
1 | import { createApp } from "vue"; |
Vue.use()
Vue.use的作用是注册组件,接收一个参数。
若参数是函数,Vue.use()内部直接执行函数来注册组件。
若参数是对象,Vue.use()则执行对象的install方法来注册组件
路由规则
定义一个数组,数组中存储一些路由规则的对象。
路由组件对象相应的路径,当路径发生变化时,会加载对应的组件。
创建Vue实例的过程中注册router对象
当我们创建Vue实例的时候,配置router选项,会给vue实例注册$router和$route两个属性。
$route:是路由规则,存储了当前路由的数据。
$router:是路由对象,路由对象提供与路由相关的方法如$router.push(), $router.replace(), $router.go()等
$router.currentRoute是当前路由规则,当不方便拿到$route时,可以通过$router.currentRoute拿到当前路由规则。
动态路由
动态路由,通过占位来匹配路由中变化的部分。
当动态路由开启props可以在Detail组件中,通过props拿到URL中的参数
1 | <script> |
当未开启props时,可以通过 $route.params.id来获取URL中的参数
路由嵌套
提取公共模板到Layout.vue组件中,在Layout组件中之使用router-view来占位变化的组件。
在路由规则配置中,子路由path配置可以是相对路径也可以是绝对路径。
编程式导航
$router.push():参数接收两种方式
字符串:即要跳转的路由地址
对象:
1
2
3
4
5
6
7$router.push({
name:'PathName',
params::{
//传递路由参数
id:1
}
})
$router.replace():参数形式与$router.push()相同但是,replace方法不会记录本次历史。会改变当前历史。
$router.go():跳转到某次记录,参数可以是负数(后退),也可以是正数(前进)
Hash和History模式的区别
表现形式
- hash:
https://www.example.com/#/test?id=1234 - history:
https://www.example.com/test/1234
原理
hash模式基于锚点,以及onhashchange事件修改页面。
当地址发生变化时,触发onhashchange事件,根据锚点不同,呈现不同的组件到页面。
history模式是基于H5的History API,实现客户端路由。
history.pushState(),IE 10以后才支持,只修改路径,记录到历史,不向服务器发送请求history.replaceState(),修改路径,不记录到历史,不向服务器发送请求
通过调用history.pushState方法改变地址栏,并将当前地址记录到浏览历史中。
监听popstate事件,当点击浏览器前进、后退按钮时,调用history.back()和history.forward()方法时才会触发popstate事件。
当地址改变之后,根据当前路由地址找到相应的组件,重新进行渲染。
服务端支持
hash模式不需要服务端支持。
history模式需要服务端支持。
history模式,使用前端路由,路由发生变化时,不想服务端发送请求。
当页面刷新时,想服务端发送请求,导致页面找不到。
所以,需要在想服务端发送请求,找不到页面时,返回vue的index页面,再由前端路由控制页面显示。
History 模式服务端支持
node服务器配置
1 | const path = require('path') |
nginx环境
1 | server { |