vue——路由之路由跳转、路由传参、路由嵌套、路由模式

2023-11-13

 相关认识:

后端路由:对于前端的网络请求,不同的pathname,去执行后端的不同业务

前端路由:不同的网址对应各自的页面

vue的前端路由:SPA应用要做出路由效果,就得判断当前网址,然后切换组件

vue-router就是专门做切换组件的功能,它是一个单独的技术,依赖vue 就像jQuery和dom操作一样

路由引入:

  1. cdn引入
  2. npm下载引入使用
  3. cli安装

一、路由跳转

router-view标签:

  • 当地址栏的网址改变时 如果新网址与router中注册的路由匹配就会加载注册的组件渲染到当前组件的这个标签上

(一)标签跳转

     只是普通的跳转页面,没有判断等逻辑控制

(1)a标签跳转

  • a标签会请求服务器 然后刷新页面 因此用在链接外部网络
  <a href="/login">go login-a标签跳转</a>

(2)router-link标签跳转

  • 渲染到页面也是a标签 但是只是改变了地址栏的网址并没有重新加载页面
  • router-link提供跳转到某个路由的功能 如果没有匹配到路由就会跳转失败
  • 路由的底层就是采用history去监听地址栏的变化 然后把当前App组件中的router-view切换了
  • 因此用在网站内部的路由跳转 
<router-link to="/login">go login-router-link标签跳转</router-link>
<router-link :to="{path:'/login'}">go login-router-link标签跳转</router-link>

二者区别:

        router-link用于跳路由 a用于跳网址  

        router-link传参可以传对象  a只能传字符串  

(二)编程式跳转-js代码

  • 编程式跳转: this.$router.push({path:"路由"})
  • 这种跳转方式用js代码写逻辑点击后跳转
<button @click="gologin">js代码写跳转--编程式跳转</button>

   在方法中设置跳转: 

gologin() {
      // this.$router:绑定在组件原型链上的路由对象
      this.$router.push("/login");
      //也可以是: this.$router.push({path:"/login"})
    }

 (三)示例

二、路由传参

(一)query传参

  • query传参:把参数放在querystring字段中  即 ? 之后

跳转传参:

跳转4种:

  • <router-link to="/info?id=1&pwd=123">go info</router-link>
  • <router-link :to="{path:'/info',query:{id:1,title:'标题'}}"></router-link>
  •  this.$router.push("/info?id=1&pwd=123")
  • this.$router.push({path:"/info",query:{id:1,title:'标题'}})

接收1种:

  • this.$route.query

在created之后的所有地方 接受获取数据,如果没有传参 这个值就没有

 (二)动态路由(params)传参

  •  params传参:把参数放在pathname中  即 / 之后

跳转传参:

跳转4种:

  • <router-link to="/news/参数">news</router-link>

  • <router-link :to="{name:"news",params:{id:参数}}">news</router-link>

  • this.$router.push("/news/参数")

  • this.$router.push({name:"news",params:{id:参数}})//必须用name跳路由 "id"处与注册路由时声明的变量名一致

接收1种:

  • this.$route.params

在created之后的所有地方 接受获取数据,如果没有传参 这个值就没有

三、路由嵌套

一个路由对象的设计中中包含:

  • path(路由匹配的路径)  
  • name(路由的名字,方便直接通过名字来匹配路由)
  • component(匹配路径时对应渲染的组件)  
  • redirect(匹配路径时重新匹配另外的路径)  
  • children(子路由们的数组)  

eg:

routes=[{path,name,component,redirect,children},{path,component,redirect,children,name}]

父路由中,一定要写 “<router-view></router-view>”才会加载子路由

子路由注册:

(1)path带“/”: 从父路由路径开始写到子路由路径  相当于绝对路径

(2)path不带“/”:直接写子路由路径  相当于相对路径

(3)星号路由/*:匹配所有  一般放在最下面 网址匹配错误(未注册的网址)时到指定路由路径

(4)重定向路由redirect:匹配路径时重新匹配另外的路径

{
    path: '/father',
    name: 'father',
    component: ()=>import("../views/father/child.vue"),
	children:[
        //直接写子路由路径  相当于相对路径
		{path:"child1",name:"child1",component:()=>import("../views/father/child1.vue")},
	    {path:"child2",name:"child2",component:()=>import("../views/father/child2.vue")},
        //从父路由路径开始写到子路由路径  相当于绝对路径
        {path:"/father/child3",name:"child3",component:()=>import("../views/father/child3.vue")},
		//星号路由:匹配所有 以上路由匹配不到就直接到父路由的第一个子路由界面
        {path:"/*",component:()=>import("../views/father/child1.vue")}
	],
     //用户输入的是/father父路由 帮他重定向到/father/child1 即自动跳转到第一个子路由界面
     redirect:"/father/child1",
  },

四、补充

this.$router.push({path:"/home"}) :向 history 添加新的历史记录
this.$router.replace({path:"/home"}):与push相似,但不会向 history 添加新记录,而是替换当前的history记录

this.$router.go(1):在浏览器记录中前进一步,等同于 history.forward()
this.$router.go(-1):后退一步记录,等同于 history.back()
this.$router.go(3):前进 3 步记录
this.$router.go(-100):如果 history 记录不够用,就失败

五、路由模式:

(1)history: 需要后端配合

history模式:

history采用HTML5的新特性;

提供了两个新方法:pushState(),replaceState()可以对浏览器历史记录栈进行修改,以及popState事件的监听到状态变更。

history 模式下,前端的 URL 必须和实际向后端发起请求的 URL 一致

底层切换组件的方式是使用H5的window.history的技术,当地址栏的history状态发生变化时,切换了router-view渲染的组件 来“欺骗”用户 达到切换新网页的效果

打包--托管静态页面--修改egg-static里面的prefix为/ --后端写个*路由匹配所有错的网址--返回给前端一个静态文件(SPA)--前端接收到就加载vue项目的js代码--跑路由代码根据网址判断显示组件

单页应用:SPA 整个网址只有一个页面(一个html文件)

(2)hash模式: #后都是hash值  无需后端配合 

hash模式:

在浏览器中符号“#”,#以及#后面的字符称之为hash,用window.location.hash读取

特点:hash虽然在URL中,但不被包括在HTTP请求中

用来指导浏览器动作,对服务端安全无用,hash不会重加载页面。

hash 模式下,仅 hash 符号之前的内容会被包含在请求中

底层切换组件的方式是使用老技术hash值,当地址栏的hash状态发生变化时,切换了router-view渲染的组件 来“欺骗”用户 达到切换新网页的效果,hash值不会发送给后端,所以无需后端配合 。

(3)抽象模式:自己了解

六、VueRouter router route的区别:

  • VueRouter是一个nodejs识别的模块包
  • route是路由匹配时,携带了一些信息的对象,包括path,params,hash,query等等信息
  • router是路由实例对象,包含了路由的跳转方法,钩子函数等等
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

vue——路由之路由跳转、路由传参、路由嵌套、路由模式 的相关文章

  • javascript 中对象的“异步”循环

    通常 我们可以对数组和对象进行循环来迭代属性 值 但循环是阻塞的 但是 超时可用于模拟异步循环 我设法为数组做到了这一点 http jsfiddle net LHhy2 do stuff function asyncLoop i do st
  • 滚动时输入自动完成位置错误(chrome)

    我在输入文本的默认自动完成功能方面遇到了一些麻烦 滚动时它不会相应移动 我希望自动完成文本保留在输入的正下方 有办法做到这一点吗 我在 Chrome 浏览器版本 57 0 2987 133 中发生这种情况 fiddle https jsfi
  • pubnub 和 head.js

    有没有人成功整合过pubnub http www pubnub com 和 head js 正确吗 Pubnub http www pubnub com 希望我将他们的脚本放在页面底部并带有 div 就在它前面的标签 这可以确保在最后调用
  • 使用 javascript 更改 div 颜色

    div style height 20px width 100 background color 000000 div br
  • 了解 sort() 比较函数

    我正在使用一个电子商务平台 该平台无法重新排序产品属性字段的选项 这真的很糟糕 因为要插入新选项 您几乎必须删除所有现有选项并重新开始 我正在尝试在客户端进行操作 这是我正在处理的内容 这是针对鞋码的 9 EE 9 1 2 EE 10 EE
  • 如何动态突出显示网页上的字符串?

    我想创建带有 url 的页面 例如 http xyzcorp schedules 2015Aug24 Aug28 Jim Hawkins http xyzcorp schedules 2015Aug24 Aug28 Billy Bones
  • 搜索深度嵌套数组以更新对象

    我有一个深层嵌套的数据结构 我有兴趣匹配数组 和数组数组 中的某个值 然后将一些数据推送到随附的数组中 例如以下是我的数组colors并伴随着的是更多颜色数组可能存在也可能不存在 var myData color green moreCol
  • 使用文件 API 将资源加载到 Three.js 中

    我想创建导入 3D 模型以在浏览器中查看的功能 方法是使用File API http www html5rocks com en tutorials file dndfiles Three js 加载器在我托管的文件上运行良好 我的理解是加
  • 循环遍历元素并逐步为每个元素应用 CSS 规则

    我有一个网格布局 每个网格布局中都有不同数量的元素 我想动态添加内联grid column通过循环遍历 div 中存在的每个元素的 CSS 规则 ul 与一类 list 所以 HTML 代码的输出需要是 ul class list ul u
  • 在 jQuery 可排序中对多个选定项目进行排序?

    我试图在 jQuery 可排序集中选择多个项目 然后将选定的项目一起移动 这是我的弱点开始尝试使其发挥作用 http jsfiddle net benstenson CgD8Y 这是代码 HTML div class container d
  • console.log() 显示同一对象属性的矛盾值

    我想我可能要疯了 我使用 console log 来查看对象的状态 然后在下一行对同一对象的特定属性执行 console log 并为每个属性获取不同的值 我正在使用的代码是 console log this pictures Items
  • 如何检测元素内容何时发生变化

    我正在寻找一种方法来监视元素内动态填充 无页面重新加载 内容 以便我可以将类添加到另一个元素 到目前为止我有这个 HTML div class message container div class messages error span
  • 禁用特定 div 上的 Tab 键

    我有以下结构 div div Some content div div Some content div div 我想 禁用 div2 上的 tab 键 我的意思是按下 tab 键时 div2 的元素不会获得焦点 有没有简单的方法可以使用
  • 如何处理requireJs超时错误?

    我正在使用 require js 作为加载框架编写一个移动混合应用程序 我遇到加载错误的问题 我想做的是在设备离线且无法下载在屏幕上显示地图所需的 google 地图 API 脚本时设置后备解决方案 我得到的只是 Uncaught Erro
  • Ember Data 中出现“超出最大调用堆栈大小”错误的原因可能是什么?

    Ember 发布新版本 3 6 0 后 我开始在控制台中收到错误 rsvp js 24 未捕获 RangeError 超出最大调用堆栈大小 在 WeakMap get 在 getCacheFor metal js 25 在 Computed
  • MongoDB中如何通过引用字段进行查询?

    我有两个 Mongo 模式 User id ObjectId name String country ObjectId Reference to schema Country Country id ObjectId name String
  • Node.js - 重载函数

    有没有一种方法可以重载node js中的函数 类似于 noSuchMethod https developer mozilla org en JavaScript Reference Global Objects Object noSuch
  • Node npm 包抛出使用严格:全局发布和安装后未找到命令

    我正在尝试发布 npm 包 当我全局安装该包并尝试运行 cli 命令时 我收到此错误 nvm versions node v0 12 2 bin myPack line 1 use strict command not found nvm
  • Flowtype 属性“msg”缺失为 null 或未定义

    我发现 Flow 很难用 我明白那个Array find可以返回或未定义 因此 通过阅读以下内容 github Array find on Array 引发 https github com facebook flow issues 351
  • 无法使用 HTML 设置未定义 jQuery UI 自动完成的属性“_renderItem”

    我使用以下代码将 jQuery UI 自动完成项呈现为 HTML 这些项目在自动完成控件中正确呈现 但我不断收到此 JavaScript 错误并且无法移动过去 Firefox 无法转换 JavaScript 参数 Chrome 无法设置未定

随机推荐

  • 【三】springboot整合token(超详细)

    springboot篇章整体栏目 一 springboot整合swagger 超详细 二 springboot整合swagger 自定义 超详细 三 springboot整合token 超详细 四 springboot整合mybatis p
  • 【华为OD机试真题 python】组装新的数组【2023 Q1

    题目描述 组装新的数组 给你一个整数M和数组N N中的元素为连续整数 要求根据N中的元素组装成新的数组R 组装规则 1 R中元素总和加起来等于M 2 R中的元素可以从N中重复选取 3 R中的元素最多只能有1个不在N中 且比N中的数字都要小
  • python格式化输出,format,数据类型转换。

    输出 计算机给用户输出的内容 是一个由里到外的一个过程 例如python语言中的print函数 输入 则相反 例如input函数 一 输出有普通的输出 也有格式化输出 普通输出 类似于 print hello word 这样直接打印 格式化
  • 为高尔夫比赛砍树

    为高尔夫比赛砍树 你被请来给一个要举办高尔夫比赛的树林砍树 树林由一个 m x n 的矩阵表示 在这个矩阵中 0 表示障碍 无法触碰 1 表示地面 可以行走 比 1 大的数 表示有树的单元格 可以行走 数值表示树的高度 每一步 你都可以向上
  • 系统篇: squashfs 文件系统

    一 squashfs简介 Squashfs是一套基于Linux内核使用的压缩只读文件系统 该文件系统能够压缩系统内的文档 inode以及目录 文件最大支持2 64字节 特点 数据 data 节点 inode 和目录 directories
  • 虚幻C++ http请求

    直接上代码 Fill out your copyright notice in the Description page of Project Settings pragma once include CoreMinimal h inclu
  • 测试岗?从功能测试进阶自动化测试开发,测试之路不迷茫...

    目录 导读 前言 一 Python编程入门到精通 二 接口自动化项目实战 三 Web自动化项目实战 四 App自动化项目实战 五 一线大厂简历 六 测试开发DevOps体系 七 常用自动化测试工具 八 JMeter性能测试 九 总结 尾部小
  • Mock框架应用(四)-Mock 重定向请求

    例一 先新建json配置文件重定向到www baidu com 启动mock服务 description 实现重定向的请求 request uri redirect redirectTo https www baidu com respon
  • Go并发(goroutine)及并发常用模型的实现

    前言 Go 语言最吸引人的地方是它内建的并发支持 作为天然支持高并发的语言 写并发比java和python要简单方便的多 在并发编程中 对共享资源的正确访问需要精确的控制 在目前的绝大多数语言中 都是通过加锁等线程同步方案来解决这一困难问题
  • 疯壳-MTK智能电话手表开发整板测试

    目录 内容简介 3 第一节 开机 4 第二节 绑定 5 第三节 功能测试 9 3 1 屏幕测试 9 3 2 SIM通信测试 11 3 3 SIM 测试 12 3 4 GPS测试 14 3 5 手表对时 18 官网地址 https www f
  • 1449 砝码称重 51NOD

    1449 砝码称重 题目来源 CodeForces 基准时间限制 1 秒 空间限制 131072 KB 分值 40 难度 4级算法题 现在有好多种砝码 他们的重量是 w0 w1 w2 每种各一个 问用这些砝码能不能表示一个重量为m的东西 样
  • flink中idea配置pom.xml

  • JS之预解析

    javascript 的预解析 个人理解 就是js代码在执行之前 会在相应的执行环境中 预先把 一些东西解析到内存 如果理解错误 请多多指正 一 那究竟预先解析哪些东西那 答 预先解析 function 和 var 二 还有就是预解析的顺序
  • 分布式一致算法

    一 拜占庭将军问题 拜占庭将军问题 拜占庭派多支军队去围攻一个敌人 将军不确定军队中是否有叛徒 叛徒可能擅自变更进攻决定 至少一半以上的军队同时进攻才可以取胜 在这种状态下 拜占庭将军们能否找到一种分布式的协议来让他们能够远程协商 从而就进
  • go 进阶 go-zero相关: 二. 服务启动与路由,中间件注册,请求接收底层原理

    目录 一 问题概述 二 底层源码分析 涉及到的一些结构体简介 初始化 中间件的预设置 路由注册与中间件的处理 启动服务到触发net http 接收请求的处理 三 总结 一 问题概述 了解go zero底层也是基于net http标准库实现h
  • 【树莓派】Linux内核编译

    树莓派 Linux内核编译 树莓派的Linux内核编译有两种方法 一种是在树莓派上直接编译 另一种是利用交叉编译的方法 一般我们都推荐采用交叉编译的方式进行编译 这是因为通常交叉编译Pi内核的速度比Pi本身编译快得多 性能因素 下面就讲下如
  • Maya致命错误解决方法

    因 此故障可能是由于 OpenCL 解决方案 禁用 OpenCL 通过添加 MAYA DISABLE OPENCL 1 到Maya env 复制引号里面部分 文件位于以下位置 c users username documents maya
  • Python自动合并Word文件并添加分页符的方法

    Python自动合并Word文件并添加分页符的方法 在本篇文章中 我们将介绍如何使用Python自动合并多个Word文件 并在合并后的文档中添加分页符 我们将使用Python的python docx库来处理Word文档 该库提供了丰富的功能
  • CMake动态库生成及使用

    命令行生成动态库 现有hello h 和 hello cpp文件 生成动态库 g c fPIC hello cpp hello h c 生成 o文件 fPIC 生成与位置无关的代码 动态库 g shared fPIC o libhello
  • vue——路由之路由跳转、路由传参、路由嵌套、路由模式

    相关认识 后端路由 对于前端的网络请求 不同的pathname 去执行后端的不同业务 前端路由 不同的网址对应各自的页面 vue的前端路由 SPA应用要做出路由效果 就得判断当前网址 然后切换组件 vue router就是专门做切换组件的功