前端学习之:vue2 和 vue3 router 安装; vue2 的路由配置及使用;路由守卫

vue2 和 vue3 的VueRouter 安装和使用

安装

# vue2对应版本
npm i vue-router@3

# vue3对应版本
npm i vue-router@4

引用

路由配置

import VueRouter from 'vue-router'
import LoginPage from '../views/LoginPage'
import ForgetPassword from '../views/ForgetPassword'
import SetNewPassword from '../views/SetNewPassword'
import ResetSuccess from '../views/ResetSuccess'
import HomePage from '../views/HomePage'

export default new VueRouter({
    mode: 'history',
    routes: [{
            path: '/login',
            component: LoginPage,
            // children: [{
            //     path: 'forget',
            //     component: ForgetPassword,
            // }]
        },


        {
            path: '/forget',
            component: ForgetPassword
        },

        {
            path: '/reset',
            component: SetNewPassword
        },

        {
            path: '/success',
            component: ResetSuccess
        },
        {
            path: '/home',
            component: HomePage
        }


    ]
})

路由使用

1. router-link + router view

<template>
  <div id="app">
  	    <!-- 使用 router link-->
    <div>
      <router-link to="/login"></router-link>
      <router-link to="/reset">reset password</router-link>
      <router-link to="/home">Home</router-link>
    </div>
    <!-- router view 展示路由跳转的页面 -->
    <div>
      <router-view></router-view>
    </div>
    
  </div>
</template>

路由参数传递和获取
传参
<!-- 添加路由参数 -->
  <router-link :to="{path:'/login', query:{id:1,name:'vue'}}">
   </router-link>
参数获取
 id = this.$route.query.id
跳转页面的时候在新窗口打开
  <router-link :to="{path:'/login', query:{id:1,name:'vue'}}" target="_blank">
  </router-link>

2. 编程式路由

  • 上面的 router-link 本质上相当于一个 标签,因此其作用范围非常小,如果把他放在一个 button 中,那么这个 button 只有一小部分区域是有用的。因此如果我们想将路由功能封装在某个 button 或者其他标签中,就需要使用编程式的路由方法
定义函数,在函数中封装路由跳转的操作
this.$router.push()
  • 可以在 button 标签中定义一个点击事件(@click=“toLogin”)
<template>
	<button 
        @click="toLogin"
        >Login
    </button>
</template>
methods:{
	// 通过这种方式
	toLogin () {
		   this.$router.push({path: "/login", query: {id: 'abc'}})
		 }
}

 // 参数获取
 id = this.$route.query.id
  • push 方式进行路由跳转可以进行按照访问的先后顺序进行回退
this.$router.replace()
<template>
	<button 
        @click="toLogin"
        >Login
    </button>
</template>
methods:{
	// 通过这种方式
	toLogin () {
		   this.$router.replace({path: "/login", query: {id: 'abc'}})
		 }
}

 // 参数获取
 id = this.$route.query.id
  • push 方式进行路由跳转每一次都会覆盖上一次的路由操作,因此不能回访之前的页面

参考链接

https://www.cnblogs.com/fps2tao/p/12049526.html

路由守卫

  • 作用是保证用户必须满足一定的条件才能访问目标页面
  • 一定要注意 next() 不要忘记写,否则无法进行跳转,会阻塞住
1. 全局路由守卫
全局前置路由守卫(router.beforeEach)
  • 通过在路由的文件中使用 beforeEach() 来设置 全局前置路由守卫 即对路由文件下所有的路由都有限制作用
    在这里插入图片描述

  • 另外一种方式是,在每个路由配置项中的 meta 字段 中配置路由想要守卫的内容:
    在这里插入图片描述

  • 比如上面的两个路由配置中 meta 中都创建了 isAuth 字段,并设置了 true;因此我们可以在全局路由的前置守卫这里把 isAuth 当做守卫条件。如果满足这个条件则可以实现跳转。
    在这里插入图片描述

全局后置路由守卫 (router.afterEach)
  • 比如下面的后置路由守卫做的事情是保证每次页面跳转之后,标签的 title 都会随之更新
    在这里插入图片描述
2. 独享路由守卫 (beforeEnter)
  • 在一个路由配置信息中进行配置
  • 独享路由守卫只有前置没有后置
  • 但是独享路由守卫可以和全局后置路由守卫配合使用
    在这里插入图片描述
    在这里插入图片描述
3. 组件内路由守卫
beforeRouteEnter

在这里插入图片描述

beforeRouteLeave

在这里插入图片描述

  • 完全不同于后置路由守卫,完全两码事;只有全局的路由守卫才有前置和后置的概念。独享路由守卫或者组件中是没有后置路由守卫概念的。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Vue2 的路由守卫可以通过给路由配置中的 `beforeEnter`、`beforeRouteEnter`、`beforeRouteUpdate` 和 `beforeRouteLeave` 属性添加相应的函数来实现。 - `beforeEnter`:在进入路由之前被调用,可以用来进行全局的路由守卫配置。 - `beforeRouteEnter`:在进入路由之前被调用,但是此时组件实例还未被创建,无法访问 `this`,可以通过传递一个回调函数来获取组件实例。 - `beforeRouteUpdate`:在当前路由改变,但是该组件被复用时被调用,可以用来对路由参数的变化作出响应。 - `beforeRouteLeave`:在离开当前路由之前被调用,可以用来进行一些离开前的确认或清理操作。 以下是一个示例,演示如何配置路由守卫: ```javascript import Vue from 'vue' import Router from 'vue-router' Vue.use(Router) const router = new Router({ routes: [ { path: '/home', component: Home, beforeEnter: (to, from, next) => { // 在这里可以进行全局的路由守卫配置 // 比如验证用户是否登录等 next() } }, { path: '/profile', component: Profile, beforeEnter: (to, from, next) => { // 在这里可以进行当前路由守卫配置 // 比如验证用户的权限等 next() } } ] }) export default router ``` 在以上示例中,我们给 `/home` 和 `/profile` 路由配置了不同的 `beforeEnter` 函数,这些函数会在路由跳转之前被调用。根据具体需求,我们可以在这些函数中进行用户登录验证、权限判断等操作,并通过调用 `next()` 方法来继续路由跳转或者中断路由跳转。 需要注意的是,在 `beforeRouteEnter` 钩子中无法直接访问组件实例,如果需要在该守卫中访问组件实例,可以通过传递一个回调函数来获取组件实例,如下所示: ```javascript beforeRouteEnter: (to, from, next) => { next(vm => { // 在这里可以通过 vm 访问组件实例 }) } ``` 这样就可以在路由守卫中进行相应的配置和操作了。希望对你有帮助!如有更多问题,请继续提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

暖仔会飞

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值