当前位置: 首页 > news >正文

Vue.js核心技术解析与uni-app跨平台实战开发学习笔记 第7章 Vue.js高级进阶 7.10 路由守卫

Vue.js核心技术解析与uni-app跨平台实战开发学习笔记

第7章 Vue.js高级进阶

文章目录

      • Vue.js核心技术解析与uni-app跨平台实战开发学习笔记
      • 第7章 Vue.js高级进阶
        • 7.10 路由守卫
          • 7.10.1 全局路由守卫
          • 7.10.2 组件内路由守卫
          • 7.10.3 离开组件时守卫

7.10 路由守卫

路由守卫就是在进入页面之前做一层判断,如果没有守卫,则可以直接进入页面,如果添加了守卫,则需要做页面跳转

举个栗子:

有3个组件,登录、商品详情、购物车。

当用户单击商品详情时,可以直接进入页面,当单击购物车时,需要判断是否登录,如果登录即可进入购物车,如果没有登录则需要先跳转到登录页面。

【路由守卫分为全局路由守卫、组件内路由守卫和离开组件时路由守卫】

7.10.1 全局路由守卫

在main.js中添加

router.beforeEach((to,from,next)=>{
  //to表示要去的新页面
  //from表示旧页面
  //next表示是否放行
  next()
})

next参数表示是否放行,不管有没有进行守卫判断都需要放行,否则会整体拦截页面

router.beforeEach → 开启路由守卫

创建三个组件

login.vue

<template>
    <div>
        <h1>
            登录页面
        </h1>
    </div>
</template>
<script>
export default {
    
}
</script>
<style scoped>

</style>

detail.vue

<template>
    <div>
        <h1>
            详情页面
        </h1>
    </div>
</template>
<script>
export default {
    
}
</script>
<style scoped>

</style>

cart.vue

<template>
    <div>
        <h1>
            购物车页面
        </h1>
    </div>
</template>
<script>
export default {
    
}
</script>
<style scoped>

</style>

HelloWorld组件中的视图层:

在这里插入图片描述

路由匹配规则

import Vue from 'vue'
import Router from 'vue-router'
import HelloWorld from '@/components/HelloWorld'
import login from '@/components/login'
import detail from '@/components/detail'
import cart from '@/components/cart'

Vue.use(Router)

export default new Router({
  routes: [
    {
      path: '/',
      name: 'HelloWorld',
      component: HelloWorld
    },
    {
      path: '/login',
      name:'login',
      component:login
    },
    {
      path: '/detail',
      name:'detail',
      component:detail
    },
    {
      path: '/cart',
      name:'cart',
      component:cart,
      meta:{
        needAuth:true
      }
    }
  ]
})

进入购物车组件需要进行路由判断,meta属性就是用来判断是否需要守卫

main.js

// The Vue build version to load with the `import` command
// (runtime-only or standalone) has been set in webpack.base.conf with an alias.
import Vue from 'vue'
import App from './App'
import router from './router'

Vue.config.productionTip = false


//全局过滤器
Vue.filter('toFixed1',function(val,data){
  return val.toFixed(data)
})


router.beforeEach((to,from,next)=>{
  //to表示要去的新页面
  //from表示旧页面
  //next表示是否放行
  var islogin = 0  //0表示未登录,1表示已登录
  if(to.meta.needAuth){
    if(islogin==0){
      router.push({name:'login'})
    }
    if(islogin==1){
      next() //放行
    }
  }
  else{  
    next()
  }

})


/* eslint-disable no-new */
new Vue({
  el: '#app',
  router,
  components: { App },
  template: '<App/>'
})

运行效果

在这里插入图片描述

可以看到,详情页面可以直接访问,但是点击“购物车”时,因为islogin为0,则会跳转到登录界面

7.10.2 组件内路由守卫

新建订单组件order.vue

<template>
    <div>
        <h1>
            订单组件
        </h1>
    </div>
</template>
<script>
export default {
    beforeRouteEnter:(to,from,next)=>{
        var islogin=0
        if(islogin==0){
            next({name:'cart'})
        }else{            
             next()

        }
    }
    
}
</script>
<style scoped>

</style>

HelloWorld视图层:

在这里插入图片描述

路由匹配规则

在这里插入图片描述

组件内守卫不需要meta属性

运行效果

在这里插入图片描述

这个结果也很好理解,首先因为islogin为0,会想跳转到购物车,但是购物车有全局守卫,所以直接跳到了登录组件。

7.10.3 离开组件时守卫

举个栗子:想从订单组件跳转回helloworld

order.vue

<template>
    <div>
        <h1>
            订单组件
        </h1>
    </div>
</template>
<script>
export default {
    beforeRouteEnter:(to,from,next)=>{
        var islogin=1
        if(islogin==1){
            next()
        }else{            
             next({ name: 'login' })

        }
    },

    beforeRouteLeave:(to,from,next)=>{
        if(confirm('是否离开?')==true){
            next()
        }else{
            next(false)
        }
    }
}
</script>
<style scoped>

</style>

运行效果

在这里插入图片描述

OK。

相关文章:

  • 金融核心系统云原生转型的三个挑战、六个误区和四个步骤
  • zsh安装以及ROS适配
  • 猿创征文|FlexManager与阿里云MQTT通讯
  • Linux指令——crontab
  • 程序员的中秋
  • mysql数据库的安装教程
  • 新电脑的正确打开方式——(近万字图文并茂详细分步骤讲解)【包括个性锁屏,磁盘分区……】等你来解锁哦
  • .NET版Word处理控件Aspose.words功能演示:在ASP.NET MVC中创建MS Word编辑器
  • 【毕业设计】基于单片机的手势检测识别系统 - arduino 物联网嵌入式
  • 【Node.js】深度解析常用核心模块-path模块
  • C语言指针操作(六)*返回指针值的函数
  • 10. Vue 常用的修饰符的作用详解?
  • 第五篇 python 基本语法(一)
  • 猿创征文| JAVA Web的环境部署
  • Python基础(一) | Python的基本语法
  • 《用数据讲故事》作者Cole N. Knaflic:消除一切无效的图表
  • 【RocksDB】TransactionDB源码分析
  • Angular数据绑定机制
  • java小心机(3)| 浅析finalize()
  • Laravel Telescope:优雅的应用调试工具
  • miniui datagrid 的客户端分页解决方案 - CS结合
  • MySQL数据库运维之数据恢复
  • Otto开发初探——微服务依赖管理新利器
  • 等保2.0 | 几维安全发布等保检测、等保加固专版 加速企业等保合规
  • 警报:线上事故之CountDownLatch的威力
  • 视频flv转mp4最快的几种方法(就是不用格式工厂)
  • 提升用户体验的利器——使用Vue-Occupy实现占位效果
  • 项目实战-Api的解决方案
  • 曾刷新两项世界纪录,腾讯优图人脸检测算法 DSFD 正式开源 ...
  • ​ 轻量应用服务器:亚马逊云科技打造全球领先的云计算解决方案
  • ​DB-Engines 11月数据库排名:PostgreSQL坐稳同期涨幅榜冠军宝座
  • #pragma pack(1)
  • ( 用例图)定义了系统的功能需求,它是从系统的外部看系统功能,并不描述系统内部对功能的具体实现
  • (10)Linux冯诺依曼结构操作系统的再次理解
  • (C语言)逆序输出字符串
  • (八)光盘的挂载与解挂、挂载CentOS镜像、rpm安装软件详细学习笔记
  • (附源码)spring boot公选课在线选课系统 毕业设计 142011
  • (附源码)springboot人体健康检测微信小程序 毕业设计 012142
  • (附源码)ssm本科教学合格评估管理系统 毕业设计 180916
  • (强烈推荐)移动端音视频从零到上手(下)
  • (亲测成功)在centos7.5上安装kvm,通过VNC远程连接并创建多台ubuntu虚拟机(ubuntu server版本)...
  • (一)为什么要选择C++
  • (转)利用PHP的debug_backtrace函数,实现PHP文件权限管理、动态加载 【反射】...
  • .[hudsonL@cock.li].mkp勒索病毒数据怎么处理|数据解密恢复
  • .NET CF命令行调试器MDbg入门(二) 设备模拟器
  • .NET Core Web APi类库如何内嵌运行?
  • .NET构架之我见
  • .NET下的多线程编程—1-线程机制概述
  • .NET中的Exception处理(C#)
  • /etc/motd and /etc/issue
  • /usr/bin/python: can't decompress data; zlib not available 的异常处理
  • @angular/cli项目构建--http(2)
  • @NoArgsConstructor和@AllArgsConstructor,@Builder
  • @RequestParam详解
  • [BZOJ1008][HNOI2008]越狱