vue 关于路由和导航守卫

一、路由的概念

hash地址与组件之间的对应关系

前端路由的工作方式:

  1. 点击路由链接
  2. 导致url地址中的hash值变化
  3. 前端路由监听hash地址变化
  4. 路由把hash地址对应的组件渲染到浏览器

二、路由的基本用法

vue-router官网

1、安装路由

目前最新 npm install vue-router@4
vue2适用 npm install vue-router@3.5.2 -S

2、创建路由模块,并挂载

在src目录下,新建router/index.js路由模块,内容如下:

//1、导入vue和vueRouter
import Vue from 'vue'
import VueRouter from 'vue-router'

//2、使用路由
Vue.use(VueRouter)

//3、构造路由实例对象
const router = new VueRouter()

//4、把实例对象导出,共享一个路由对象
export default router

在main.js中挂载

import router from '@/router/index.js'
//可以简化,不写index.js,因为引入的是文件夹,会自动找到文件夹下的index.js

new Vue({
  render: h => h(App),
  //路由挂载
  router
}).$mount('#app')

3、在路由模块中声明路由的对应关系

import Left from '@/components/Left.vue'
import Right from '@/components/Right.vue'
//3、构造路由实例对象
const router = new VueRouter({
    routes: [
        { path: "/left", component: Left },
        { path: "/right", component: Right }
    ]
})


//然后在要使用的地方写上占位符
  <router-link to="/left">左侧</router-link>
  <router-link to="/right">右侧</router-link>

  <router-view></router-view>

4、路由重定向

 { path: "/", redirect: "/left" },

三、嵌套路由

加上children

//3、构造路由实例对象
const router = new VueRouter({
    routes: [
        { path: "/", redirect: "/left" },
        { path: "/left", component: Left },
        {
            path: "/right",
            component: Right,
            redirect:"/right/tab1"
            children: [
                { path: "tab1", component: Tabone },
                { path: "tab2", component: Tabtwo }
            ]
        }
    ]
})

四、动态路由

把hash地址中可变部分定义为参数项,从而提高路由规则的复用性

   { path: "/movie/:id", component: Movie}

为路由规则开启props传参

   { path: "/movie/:id", component: Movie, props:true}

在使用的组件中
<h3> {{id}}</h3>

export default {
   props:['id']
}

五、导航守卫

1、声明式导航 && 编程式导航

声明式:点击链接,例如<a>、<rooter-link>

编程式:调用API方法实现跳转,例如push、replace、go三种方法

//跳转,增加一条历史记录
this.$router.push("/left")
//跳转,替换当前历史记录
this.$router.replace("/left")
//在历史记录中前进或者后退,一般只前进或者后退一步,所以提供了back、forward代表前进或后退一步
this.$router.go(-1)
this.$router.back()
this.$router.forward()

导航守卫可以控制路由的访问权限

一般用于检测登录权限


2、全局前置守卫 

//只要发生路由跳转,必然触发before指定的回调函数
router.beforeEach(function(to,from,next){
//to将要访问的路由对象信息
//from表示要离开的对象信息
//next函数表示放行
  next()
})

控制访问权限例子:

//只要发生路由跳转,必然触发before指定的回调函数
router.beforeEach(function(to,from,next){
  if(to.path === '/main'){
     const token = localStorage.getItem('token')
     if(token){
         next()//有token值则直接访问后台主页
     } else{
         next('/login')//没有token,则跳转到登录页
     }
  }else{//不是访问后台主页,则直接放行
      next()
  }
})

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
动态路由是指在Vue Router中,可以根据不同的参数动态生成路由路径。通过动态路由,我们可以根据不同的参数加载不同的组件或页面。在Vue Router中,我们可以使用冒号(:)来定义动态路由参数。例如,我们可以定义一个动态路由路径为`/user/:id`,其中`:id`表示一个动态的参数。当用户访问`/user/1`时,Vue Router会根据参数1加载相应的组件或页面路由守卫是指在Vue Router中,可以通过路由守卫来控制路由的访问权限和导航行为。Vue Router提供了三种类型的路由守卫:全局前置守卫、全局解析守卫和组件内的守卫。全局前置守卫会在路由切换之前被调用,可以用来进行权限验证或其他全局操作。全局解析守卫会在路由切换之前被调用,用来获取路由数据。组件内的守卫会在组件内部被调用,可以用来进行组件内部的权限验证或其他操作。 以下是一个示例代码,演示了如何使用动态路由路由守卫: ```javascript // 定义动态路由 const routes = [ { path: '/user/:id', component: User, meta: { requiresAuth: true // 设置需要登录才能访问的路由 } } ] // 创建路由实例 const router = new VueRouter({ routes }) // 全局前置守卫 router.beforeEach((to, from, next) => { if (to.meta.requiresAuth && !isAuthenticated()) { next('/login') // 如果需要登录才能访问的路由没有登录,则跳转到登录页面 } else { next() // 否则继续路由切换 } }) // 组件内的守卫 export default { beforeRouteEnter (to, from, next) { // 在进入路由前调用,可以访问组件实例this if (this.$store.state.user.isAdmin) { next() // 如果是管理员,则继续路由切换 } else { next(false) // 否则取消路由切换 } } } ```

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值