vue-router(路由原理、路由守卫、传参)

大学生电赛学习之路 可以看到全国大学生电子设计大赛的认可度是非常高的,属于A类学科竞赛。电子设计大赛的形式也是给出题目,参赛者有四天三夜的时间解决问题,题目大致可以分为:控制类、测量类、高频类以及电力电子类。该竞赛会在单数年的9月份举行。但是对于新生来说电赛确实遥不可及的,可能在很多学校本科生是不能进入实验室的,但是就算进了实验室你就有资格去参加电赛或者说能拿一个不错的奖项吗? 现在正值新生开学季,当然会有一大批学生会进入实验室的学习,电赛的举办时间是每年的暑假,所以说对于大一同学来说有一年的时间去准备,那我们就来说一说参加. 阅读详情

路由原理

1、概念:

通过改变 URL,在不重新请求页面的情况下,更新页面视图。

2、实现方式:

更新视图但不重新请求页面,是前端路由原理的核心之一,目前在浏览器环境中这一功能的实现主要有2种方式:

  1. Hash — 利用 URL 中的hash("#");监听 url 中 hash 的变化,然后渲染不同的内容,这种路由不向服务器发送请求,不需要服务端的支持;
  2. 利用 History interface 在HTML5中新增的方法,监听 url 中的路径变化,需要客户端和服务端共同的支持;

Vue 中,它是通过 mode 这一参数控制路由的实现模式:

const router=new VueRouter({
    mode:'history',
    routes:[...]
})

mode 参数:

1.默认 hash

2. history。如果浏览器不支持 history 新特性,则采用 hash

3. 如果不在浏览器环境下,就采用 abstract(Node环境下)

2.1 hash模式

路由的hash模式其实是利用了window可以监听onhashchange事件,也就是说你的url中的值(#后面的值)如果有变化,前端是可以做到监听并做一些响应,这么一来,即使前端并没有发起http请求他也能够找到对应页面的代码块进行按需加载,window.location.hash获取hash值

2.2 history模式

监听url变化的事件popstate,从 HTML5开始,History interface 提供了2个新的方法:pushState()、replaceState() 使得我们可以对浏览器历史记录栈进行修改 但是不会触发popstate事件,可以用window.dispatchEvent添加事件

history.pushState() 将新路由添加到浏览器访问历史的栈顶
history.replaceState() 替换掉当前的路由

2.3 hash与history的区别
hashhistory
url显示url带#号无#
回车刷新可以加载到hash值对应页面一般就是404掉了
支持版本支持低版本浏览器和IE浏览器HTML5新推出的API(部分版本不支持)
2.4 话术总结及使用场景

hash模式url里面永远带着#号,我们在开发当中默认使用这个模式。那么什么时候要用history模式呢?如果用户考虑url的规范那么就需要使用history模式,因为history模式没有#号,是个正常的url适合推广宣传。当然其功能也有区别,比如我们在开发app的时候有分享页面,那么这个分享出去的页面就是用vue或是react做的,咱们把这个页面分享到第三方的app里,有的app里面url是不允许带有#号的,所以要将#号去除那么就要使用history模式,但是使用history模式还有一个问题就是,在访问二级页面的时候,做刷新操作,会出现404错误,那么就需要和后端人配合让他配置一下apache或是nginx的url重定向,重定向到你的首页路由上就ok啦。

路由守卫

1、全局守卫

无论访问哪一个路径,都会触发全局的钩子函数,位置是调用router的方法 router/index.js

router.beforeEach((to,from,next)=>{}) 进入之前触发
router.afterEach((to,from)=>{}) 进入之后触发(后置钩子函数,不需要next)

回调函数中的参数:

  1. to:即将要进入的目标 路由对象
  2. from:当前导航正要离开的路由
  3. next:表示下一步要干啥,next(’/addGoods’)就表示下一步,调到路由 /addGoods
//路由配置
{
  	path: '/about',
  	name: "about",
    meta: {auth: true},		//需要认证
    component: ()=>import(/*webpackChunkName: "about"*/ "./views/About.vue")
}

//全局守卫
router.beforeEach((to,from,next)=>{
  //要访问/about 且未登录需要去登录
  if(to.meta.auth && !window.isLogin){
    if(window.confirm('请登录')){ //用户操作了登录
      window.isLogin = true;
      next(); 	//登录成功,继续
    }else{
      next('/');	//放弃登录,回首页
    }
  }else{
    next();	//不需登录,继续
  }
})
2、组件内守卫

放在需要守卫的组件里,跟data和methods同级

beforeRouteEnter((to,from,next)=>{}) 进入路由前调用

      beforeRouteEnter(to,from,next){
     	alert(this.data);  //此时组件还未实例化 弹出为 unedfind
        next(vm =>{
          alert(vm); //vm相当于this
        })
      }

beforeRouteUpdate((to,from,next)=>{}) 该组件被复用时调用

  beforeRouteUpdate (to, from, next) {
      // 当前路由改变,但是该组件被复用时调用
      // 举例来说,对于一个带有动态参数的路径 /a/:id,在 /a/1 和 /a/2 之间跳转的时候
      // 由于会渲染同样的 a组件,因此组件实例会被复用。而这个钩子就会在这个情况下被调用。
    }

beforeRouteLeave((to,from,next)=>{})导航离开该组件的对应路由时调用

  	 beforeRouteLeave(to,from,next){
          if(confirm("确定离开吗?") == true){
            next() 
          }else{
            next(false);
          }
      }
3、路由独享守卫

用法与全局守卫一致。只是,将其写进其中一个路由对象中,只在这个路由下起作用。

beforeEnter((to,from,next)=>{})

在这里插入图片描述

路由传参

1、页面刷新数据不会丢失
<div class="examine" @click="insurance(id)">查看详情</div>
//事件
methods:{
  insurance(id) {
       //直接调用$router.push 实现携带参数的跳转
        this.$router.push({
          path: `/particulars/${id}`,
        })
}

需要对应路由配置如下:

   {
     path: '/particulars/:id',
     name: 'particulars',
     component: particulars
   }

另外页面获取参数如下:

this.$route.params.id
2、页面刷新数据会丢失

通过路由属性中的name来确定匹配的路由,通过params来传递参数。

methods:{
  insurance(id) {
       this.$router.push({
          name: 'particulars',
          params: {
            id: id
          }
        })
  }

对应路由配置: 注意这里不能使用:/id来传递参数了,因为组件中,已经使用params来携带参数了。

   {
     path: '/particulars',
     name: 'particulars',
     component: particulars
   }

子组件中:获取参数

this.$route.params.id
3、使用path来匹配路由,通过query来传递参数
methods:{
  insurance(id) {
        this.$router.push({
          path: '/particulars',
          query: {
            id: id
          }
        })
  }

对应路由配置:

	{
     path: '/particulars',
     name: 'particulars',
     component: particulars
   }

对应子组件: 获取参数

this.$route.query.id

总结:params传参和query传参的区别
(1) query可以使用namepath,而params只能使用name
(2) 使用params传参刷新后不会保存,而query传参刷新后可以保存
(3) params在地址栏中不会显示,query会显示
(4) params可以和动态路由一起使用,query不可以

IMU卡尔曼滤波方法详细介绍 本文介绍了基于IMU和卡尔曼滤波的状态估计方法。系统采用9维状态向量(位置、速度、加速度计零偏),通过牛顿运动学建立状态方程,并利用外部位置观测进行校正。详细推导了状态转移矩阵和控制输入矩阵的形式,阐述了预测和更新的计算步骤。同时说明了过程噪声Q和观测噪声R的设置原则,其中Q反映模型不确定性,R取决于传感器精度。该方法可有效融合IMU测量与外部观测数据,实现位置、速度和偏置的联合估计。 阅读详情

相关推荐

【GLM5】手把手教你在openclaw中白嫖英伟达羊毛

openclaw很强,但是也很贵,每一次请求都会消耗大量的token。而英伟达平台正好可以白嫖免费的模型,于是,我们一拍即合。

Science prince的博客 3785

vue路由传参vue路由原理、区别】

vue路由传值主要通过 query 和 params 来实现 方法1、query query传参就是在url地址后面拼接 ?参数名=参数值 优点:通用性比较好,刷新数据不会丢失 例如 rourer-link to=”/goods?id=1001” this.$router.push({path:'home',query:{name:'张三',id:'a1dff45'}) //还有个简单的写法 this.$router.push('/home?id='+ 1234 +'&type='+ true)

weixin_45811884的博客 1978

Android Framework 开发工程师职位深度解析与面试指南

摘要:博泰车联网科技(上海)股份有限公司招聘Android Framework开发工程师,负责车载系统的底层开发与优化。岗位要求5年以上经验,深入掌握Android Framework机制(WindowManager、PowerManager等模块),熟悉高通平台中间件架构及NDK/JNI开发,具备性能优化(启动时间、ANR处理)、OTA升级等能力。需熟练使用Android Studio、Git等工具,有车载开发经验者优先。工作内容包括Framework定制开发、问题排查及技术文档编写。

郑伟强dev的专栏 515

Vue 问题笔记 vue-router单页面应用跳转路由时触发事件

在使用vue-router时,我们可以很方便地实现单页面应用,当我们想要跳转到“另一个页面”的时候,只要调用vue-routerAPI中的方法,传入相应的路由作为参数即可。 单页面应用的一个特点是,如果某个路由已经在本地加载过了,即已经将生命周期走到了mounted的时候,如果我们再进入这个页面,不会再执行created和mounted里面的方法。 简单来说,有两个页面A和B,我们使用单页面的...

zem 1万+

路由守卫路由之前的传参

一.先介绍有那些常见的路由守卫 (1)全局路由守卫 (2) (3)

qq_59076775的博客 1769

vue系列 —— vue-route详细使用方法

说到路由, 我们最熟悉的路由是什么呢? 那就是路由器了。 其实路由器有两个重要的功能: 路由和传送 路由路由决定数据包从哪里来, 到哪里去。 也有是来源和目的地的路径。 路由中有一个路由表,路由表本质上就是一个映射表,决定了数据包的传输方向。 传送: 传送是将输入端的数据传送给输出端 下面我们先来搭建一个项目, 然后一边学习一遍在项目里实战 创建vue-cli2项目 vue init webpacek vueroute 然后一路向下就可以了, 如果本地创建项目很慢, 可以采用离线创建项目的

七月 3万+

vue路由守卫路由传参详解

路由守卫路由传参

weixin_51855875的博客 1135

vue-router(路由原理路由守卫传参)

路由原理 路由就是用来解析URL以及调用对应的控制器,并返回从视图对象中提取好的网页代码给web服务器,最终返回给客户端。 路由传参: 三种: 分别是query,params(拍若门次),动态路由传参 路由守卫: 2.路由守卫使用的方式有几种? 全局的 单个路由独享的 组件级的 3.vue-router全局有三个守卫router.beforeEach 全局前置守卫 进入路由之前 router.beforeResolve (比否瑞绕)全局解析守卫(2.5.0+) ...

weixin_64608867的博客 553

vue-router路由原理路由守卫传参?)

路由原理路由就是用来解析URL以及调用对应的控制器,并返回从视图对象中提取好的网页代码给Web服务器,最终返回客户端。 路由的2种模式: hash和history模式 1、hash模式 在浏览器网络地址中符号的“#”,以及#后面的字符称之为hash,用window.location.hash读取; 特点: hash虽然在URL中,但不被包括在HTTP请求中;用来指导浏览器动作,对服务端安全无用, hash不会重加载页面。 hash 模式下,仅 hash 符号之前的内容会被包含在请求中,因此对于后端来说,

Qinlin_的博客 546

Vue-Router(路由原理传参路由守卫)

前端路由概念 通过改变URL,在不重新请求页面的情况下,更新页面视图。更新视图但不重新请求页面,是前端路由原理的核心之一,目前在浏览器环境中这一功能的实现主要有两种方式:Hash 和 history hash模式 hash模式:在浏览器中符号’#’,以及’#'后面的字符成为hash 特点 1. hash 不会被包括在 http 请求中,对服务器端完全无用,因此,改变 hash 不会重新加载页面。 2. 可以为 hash 的改变添加监听事件:window.addEventListener("hashcha

m0_62198921的博客 670

vue-router--(路由原理路由守卫传参)

有两种模式: hash模式在浏览器中“#” , 以及“#”后面的字符称之为hash-----hash不会重新加载页面 history模式 : 可以对浏览器历史记录栈中进行修改,监听数据的变更 特点:history 前端的URL必须和实际向后端发起请求的 URL一致 路由传参: 分别是 query params 动态路由传参 1、params 只能使用name query可以使用name 和path 2、使用params 刷新后会丢失 而query不会 3、p...

jia632133535的博客 196

第七章 路由 Vue Router

Vue中,路由是一个核心概念,它允许开发者在单页面应用程序(SPA)中创建多个视图(或页面),并在这些视图之间进行导航。Vue路由主要通过Vue Router来实现,Vue RouterVue.js官方提供的路由插件,与Vue.js深度集成,非常适合用于构建单页面应用。Vue路由的基本概念路由:在Vue中,路由通常指应用程序中的一个页面或视图,它由一个Vue组件表示。通过定义路由,开发者可以指定当用户访问某个URL时,应该渲染哪个组件。路由器。

上官花雨滴博客!!! 1279

Vue全家桶之Vue Router(七)

Vue全家桶之Vue Router(七) 一 相关理解 1.1 什么是SPA 在讲解Vue Router的概念之前,先了解SPA和路由是什么。以下是SPA的解释: 单页 Web 应用(single page web application,SPA)。 整个应用只有一个完整的页面。 点击页面中的导航链接不会刷新页面,只会做页面的局部更新。 数据需要通过 ajax 请求获取。 1.2 什么是路由 什么是路由? 一个路由route)就是一组映射关系(key - value) key 为路径, valu

weixin_47750287的博客 558

vue-router——08.07

Vue RouterVue.js的官方路由器。 学习Vue Router之前,先了解路由中的三个基本的概念 route, routes, router。 1、 route,它是一条路由,由这个英文单词也可以看出来,它是单数, Home按钮 => home内容, 这是一条route, about按钮 => about 内容, 这是另一条路由。 2、 routes 是一组路由,把上面的每一条路由组合起来,形成一个数组。[{home 按钮 =>home内容 }, { about按钮 =&

张静的博客 392

vue-router

目标: 设备和ip的映射关系目标: 接口和服务的映射关系目标: 路径和组件的映射关系目标: 如何在Vue项目中集成路由官网: https://router.vuejs.org/zh/vue-router模块包它和 Vue.js 深度集成可以定义 - 视图表(映射规则)模块化的提供2个内置全局组件声明式导航自动激活的 CSS class 的链接……目标: vant是一个轻量、可靠的移动端 Vue 组件库, 开箱即用vant官网提供 60 多个高质量组件,覆盖移动端各类场景。

延成的博客 735

前端八股文 Vue

Vue-Router 路由

weixin_62613321的博客 1718

前端面试题

文章目录一、vue相关1. vue双向数据绑定2. vue虚拟dom,diff算法3. 一、vue相关 1. vue双向数据绑定 vue.js是采用数据劫持结合发布者-订阅者模式的方式,通过Object.defineProperty()来劫持各个属性的setter,getter,在数据变动时发布消息给订阅者,触发相应的监听回调来渲染视图。 具体步骤: 第一步: 需要observer(观察者)对数据对象进行递归遍历,包括子属性对象的属性,都加上 setter和getter 这样的话,给这个对象的某个值赋值,

Ajaloney的博客 196

前端VUE面试题总结

目录 VUEX VUEX 什么是vuex Vuex:是vue的状态管理工具,就是管理公共数据的,这个数据在任何组件都能使用 vuex的持久化数据 安装插件 npm i vuex-persistedstate --save 在store/index.js 中引入 import vuexPersist from "vuex-persistedstate" 配置 plugins:[newvuexPersist({ storage:window.localStora...

hjdjhh的博客 1251

vue-router原理

vue-router一、vue-router路由原理?二、两种路由模式1.hash模式:2.history模式路由跳转方式 一、vue-router路由原理? 1.路由就是用来解析URL实现不同页面之间的跳转 vue-router通过hash与History interface两种方式实现前端路由,更新视图但不重新请求页面”是前端路由原理的核心之一,目前在浏览器环境中这一功能的实现主要有两种方式 const routes = [ { path: '/', redirect: '/rec

零-J 6532

世纪江湖7.0

演示地址:http://demo.codechina.com/an7

华为B610-4E 210固件

固件名称:V500R019C20SPC210 固件文件名称: B610ONTV500R019C20SPC210_unite4.4_all_encrypt.bin升级方式:1、解压文件2、可以web页面在线升级更新说明:升级对之前设置的参数无影响,已有网友验证190版本直接升级到V5R019C20S210正常

上一篇: js中typeof判断、==与===的使用场景、值类型和引用数据类型的区别、手写深拷贝、类型转换,truly、falsely变量
下一篇: vue双向数据绑定原理
常鸣鸣
博客等级 码龄6年 8粉丝 14原创
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值