react-router 设计上和 vue-router 一样
三种模式
memory history
不修改 url ,路由地址在内存中,但页面刷新会重新回到首页。
browser history
- 使用
history.pushState来改 url - 使用
window.onpopstate监听url, - 需要后端nginx配合返回
index.html
hash history
使用 url hash 变化记录路由地址
// hash路由 --> http://127.0.0.1:8881/hash.html?a=100&b=20#/aaa/bbb
location.protocol // 'http:'
location.hostname // '127.0.0.1'
location.host // '127.0.0.1:8881'
location.port // '8881'
location.pathname // '/hash.html'
location.search // '?a=100&b=20'
location.hash // '#/aaa/bbb'
复制代码
路由懒加载
export default new Router({
routes: [
{
path: '/',
redirect:'/goods' //重定向
},
{
path: '/goods',
name: 'goods',
component: ()=>import('@/pages/goods') // <<=======================================
},
{
path: '/ratings',
name: 'ratings',
component: ()=>import('@/pages/ratings') // <<=======================================
},
{
path: '/seller',
name: 'seller',
component: ()=>import('@/pages/seller') // <<=======================================
},
]
})
复制代码
路由守卫
登录验证
import Router from 'vue-router'
const router = new Router({
routers: [
{path: '/', name: 'home', component: Home}
...
...
]
})
router.beforeEach((to, from, next) => {
const isLogin = localStorage.eleToken ? true : false;
if (to.path == "/login" || to.path == "/register") {
next();
} else {
isLogin ? next() : next("/login");
}
})
// 所有的页面跳转之后
router.afterEach((to, from, next) => {
})
复制代码
局部守卫
在路由配置文件使用
import Home from '../views/Home'
export default [
{
path: '/',
alias: '/home',
name: 'home',
component: Home,
// 参数1 : to表示要跳转到的路由
// 参数2 : from表示要离开的路由
// 参数3 : next
beforeEnter: (to, from, next) => {
if(from.path==="login") alert('这是从登录页来的')
next() // 注意: 在你的所有逻辑处理完以后一定要调用 next 函数, 否则页面是不会成功跳转的
}
},
...
...
]
复制代码
组件内使用
export default {
data: () => ({
}),
methods: {
},
// 这是路由的钩子函数
// 注意 : 这里面不要用this, 因为这时组件还没有被实例化
beforeRouteEnter(to, from, next) {
alert(from.path)
next()
},
// 注意 : 这里可以使用this
beforeRouteLeave(to, from, next) {
const will_leave = confirm('你确定要离开吗?')
if(will_leave) next()
else next(false)
},
// 当路由发生变化, 组件被复时触发
// 例如 : 详情页面之间的跳转('detail/123' ==> 'detail/456')
// 注意 : 这里可以使用this
beforeRouteUpdate(to, from, next) {
},
}
复制代码
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END























![[桜井宁宁]COS和泉纱雾超可爱写真福利集-一一网](https://www.proyy.com/skycj/data/images/2020-12-13/4d3cf227a85d7e79f5d6b4efb6bde3e8.jpg)

![[桜井宁宁] 爆乳奶牛少女cos写真-一一网](https://www.proyy.com/skycj/data/images/2020-12-13/d40483e126fcf567894e89c65eaca655.jpg)