Vue路由传递参数与重定向的使用方法总结

目录
  • 前言
  • 概念
    • 1、vue路由传参
    • 2、vue路由重定向
  • 实际使用场景
  • 路由传参
    • 1、使用步骤
    • 2、params传参
      • 2-1、路由属性配置参数
    • 3、query传参
    • 4、url字符串拼接
    • 5、接收路由参数的方法,分 ? 和 : 两种接收方式
    • 6、路由传参的示例
  • 路由重定向
    • 1、路由重定向语法
    • 2、实际示例
  • 其他
  • 拓展
  • 最后

前言

前端开发过程中,作为前端开发者来说关于vue的使用并不陌生,vue相关常用的知识点也是非常重要的,不管是在实际开发中还是在求职面试中都很重要。在vue使用中,路由相关的知识点是非常重要的,而且在实际开发中也是必用知识点,那么本篇博文就来聊聊vue的路由参数传递和路由重定向相关的知识点。

概念

1、vue路由传参

在使用vue开发中,路由传参是指在嵌套路由的时候,父路由向子路由传递参数,否则的话传参操作无效的。路由传参方式分为:params传参、query传参和url字符串拼接,其中,params传参又分为在url中显示参数和不显示参数两种方式。在实际使用过程中,需要知道路由跳转并传参的方式(声明式导航和编程式导航)以及接收路由参数的方法等。

2、vue路由重定向

在使用vue开发中,路由重定向指的是用户在访问地址A 的时候,强制跳转到地址D ,从而展示特定的组件页面;通过路由规则的 redirect 属性,指定一个新的路由地址,可以很方便地设置路由的重定向。

实际使用场景

在实际开发中,经常需要把某种模式匹配到的所有路由,全都映射到同一个组件。比如,现在有一个 Student组件,对于所有ID各不相同的学生用户,都要使用这个组件来渲染,这时候就需要使用传递参数来实现了。

在实际场景中的另一个情况,在用户首次访问网站页面("/根目录"首页)时,地址栏里边没有“#锚点”的信息,也就没有对应的组件用于显示,这样的话用户体验不好,可以通过重定向实现一种效果,即当浏览器没有任何 #锚点信息时,默认也给显示一个组件,即当用户在打开访问地址A的时候,根据实际业务场景需要跳转到地址C,此时就需要使用路由重定向来实现。

路由传参

路由传参方式分为:params传参、query传参和url字符串拼接。

1、使用步骤

  • 更改父组件绑定的子组件路由名称以及传递的参数;
  • 更改路由配置文件子组件路径中添加的参数,以及修改名称;
  • 更改子组件<template>内容,主要是用于展示。

注意:不要在<template>中直接添加获得的参数,需要在外层加标签包含起来。

2、params传参

在params传参使用中,只能使用name,不能用path,地址栏中不显示参数名称id,此方式可以理解为ajax中的post方法,但是有参数的值,但是当页面刷新了之后是获取不到参数值的,也就是刷新页面之后传递的参数会丢失。而且通过params传递参数,若想获取 id 的参数值,可以通过this.$route.params.id这种方式获取即可。

注意:获取参数的时候是$route,跳转和传参的时候是$router。

具体的使用示例如下所示:

//传参的设置

this.$router.push({
 name:"home", 
 //这里的params是一个对象,id是属性名,item.id是值(是从当前组件或者Vue实例上直接取到的值)
 params:{id:item.id}
 })

//这个组件对应的路由配置

{  
//组件路径
path: '/home',
//组件的别名
name: 'home', 
//组件名称
component: Home,
}

//获取路由传递参数的方法

this.$route.params.id

2-1、路由属性配置参数

在使用路由属性配置参数时候,通过路由属性配置传参可以用this.$route.params.id来获取到传递过来id的值。地址栏中不显示参数名称id,此方式可以理解为ajax中的post方法,但是有参数的值,但是当页面刷新了之后是获取不到参数值的,也就是刷新页面之后传递的参数会丢失。

注意:this.$router.push方法里面路径带的是值,路由配置项那里带的是变量名(属性名)来实现的对应参数传递。

具体的使用示例如下所示:

this.$router.push({
  name:"/home/${item.id}",
})

//这个组件对应的路由配置

{   
//组件路径
path: '/home:id', 

//组件别名
name: 'home',   

//组件名
component: Home,
}

//获取路由传递参数的方法

this.$route.params.id

3、query传参

在query传参使用中,name和path都能用。其中,在用path的时候,提供的path值必须是相对于根路径的相对路径,而不是相对于父路由的相对路径,否则无法成功访问路由。传参的地址栏显示参数格式为?id=1&index=1。

注意:query传参,可以解决页面刷新参数消失/丢失问题,此方式可以理解为ajax中的get方法,参数是直接在url后面添加,参数是显示可见的,所以在解决页面刷新参数消失/丢失问题就使用该方法来解决。

具体的使用示例如下所示:

this.$router.push({
name:"/home",    
 query:{id:item.id}
})

//这个组件对应的路由配置

{   
//组件路径
path: '/home',   

//组件别名
name: 'home',   

//组件名
component: Home,
 }

//获取路由传递参数的方法

this.$route.params.id

4、url字符串拼接

url字符串拼接,相当于直接在跳转的路由链接中拼接参数,具体示例如下所示:

url中直接带url类型

http://localhost:8080/#/myDetail/123

url中拼接请求参数

http://localhost:8080/#/myDetail?useId=123

5、接收路由参数的方法,分 ? 和 : 两种接收方式

首先,通过注入路由器,我们可以在任何组件内通过 this.$router访问路由器,也可以通过this.$route访问当前路由对象。这里再简单说明下$router和$route的区别:

  • $router是指整个路由实例,可以操控整个路由,通过'$router.push'往其中添加任意的路由对象;
  • $route是指当前路由实例('$router')跳转到的路由对象;
  • 路由实例可以包含多个路由对象.它们是父子包含关系,其中$router是路由实例,$route是路由对象。

️、?形式的参数使用this.$route.query接收参数,获取到的结果是一个对象;

️、:形式的参数使用this.$route.params接收参数,获取到的结果是一个对象。

6、路由传参的示例

这里介绍一个路由传参数的综合示例,方便对比介绍,使用场景为点击父组件的li元素跳转到子组件中,并且带有参数,具体如下所示:

父组件

<li v-for="fruit in fruit" @click="getDes(fruit.id)"> 

methods:

方法一

getDes(id) {
//  直接调用$router.push实现携带参数跳转
this.$router.push({
path: `/fruit/${id}`,
})

需要对应路由配置如下:

   {
     path: '/fruit/:id',
     name: ‘Fruit',
     component: Fruit
    }

很明显,需要在path中添加/:id,来对应 $router.push 中path携带的参数。

在子组件中获取传递的参数值的方式如下:

this.$route.params.id

方法二

父组件中:通过路由属性中的name来确定匹配路由,使用params来传递参数。

       this.$router.push({
          name: 'Fruit',
          params: {
            id: id
          }
        })

对应路由配置: 可以添加:/id 也可以不添加,添加数据会在url后面显示,不添加数据就不会显示

  {
     path: '/fruit',
     name: 'Fruit',
     component: Fruit
   }

在子组件中获取传递的参数值的方式如下:

this.$route.params.id

方法三

父组件中:使用path来匹配路由,然后使用query来传递参数。这种情况下query传递的参数会显示在url后面?id=?

    this.$router.push({
          path: '/fruit',
          query: {
            id: id
          }
    })

对应路由配置:

   {
      path: '/fruit',
     name: 'Fruit',
     component: Fruit
    }

在子组件中获取传递的参数值的方式如下:

this.$route.params.id

路由重定向

1、路由重定向语法

var router = new VueRouter({
      routes:[
    {path:'/', redirect:'/home'}, // {path:'/', redirect:'跳转到的路由地址'}
     {path:'/home', component:Home}
      ]
})

上面语法指的是,在执行/根目录路由地址的时候,页面就跳转执行/home路由地址 ,进而把对应的组件给展示出来。

注意:不仅仅“/” 可以被重定向,而且其他普通路由地址互相也可以重定向。其中,重定向会使得路由再次发生调用请求。

其实,路由重定向也是通过 routes 配置来完成,通过使用路由规则的redirect属性,指定一个新的路由地址,可以很方便地设置路由的重定向。

2、实际示例

路由重定向的使用比较简单,这里直接举实际使用例子来分析,具体示例如下所示。

示例一:从路由/mine 重定向到 /

const routes = [{ path: '/mine', redirect: '/' }];

又如从路由/home 重定向到 /main

        {
          path: '/home',
          redirect:'/main'
         }

示例二:在没有任何#锚点信息的时候,显示首页组件。

var router = new VueRouter({
    routes: [
         // 其中,path 表示需要被重定向的原地址,redirect 表示将要被重定向到的新地址。当用户在地址栏中输入`/`,会自动的跳转到`/home`,而`/home`对应的组件为Home
        {path:'/', redirect: '/home'},
       {path:'/home',component: Home},
     ]
   })

其他

再分享一种路由跳转的方式:在需要跳转的地方使用router-link进行界面的跳转以及传参数,如下所示:

1. 使用to直接构建跳转路由,不带参数

<router-link to="/home">首页</router-link>

2. 使用to构建跳转路由(含传参数),url拼接传参

<router-link :to="'/home/'+111"></router-link>

<router-link :to="{‘/home?id=111'}"></router-link>

3.使用to构建跳转路由(含传参数),query方式对象形式传参

<router-link :to="{path:‘/home',query:{id:111}}”></router-link>

4.使用to构建跳转路由(含传参数),params方式对象形式传参

<router-link :to="{name:‘/home',params:{id:111}}”></router-link>

具体实际示例如下所示,传递参数分为三步:

️、首先要使用的路由下路径给上要传的参数,路由还需要给上路由名字

          path:'/fruit/:id',
          component:Fruit,
          name:'Fruit'

️、修改连接方式,直接在to前面绑定上v-bind:

          <el-menu-item index="1-1">
                <router-link :to="{name:'Fruit',params:{id:111}}"></router-link>
           </el-menu-item>

️、具体组件中使用

<template>
<div> {{$route.params.id}}</div>
</template>
<script>
    export default {
        name: “fruit”
    }
</script>

<style scoped>
</style>

拓展

关于vue中vue-router的使用以及两种模式的区别,可以参考这篇文章:vue-router的使用以及两种模式的区别,该篇文章里面详细的介绍了vue-router以及vue路由相关的所有内容,这里不再过多赘述。

最后

通过本文关于前端开发中Vue路由传递参数和重定向的使用总结的介绍,如果认真阅读并且实践示例,应该会很好的掌握这些知识点,虽然篇幅的内容不少,但是分开来看会觉得没那么复杂,同时也整合了其他的汇总,是一篇值得阅读的文章,尤其是对于由传递参数和重定向知识点在求职面试中甚为重要,而且在实际开发中也是必用知识点,所以说这个知识点是必备的,重要性就不在赘述。欢迎关注,一起交流,共同进步。

(0)

相关推荐

  • vue中路由参数传递可能会遇到的坑

    前言 vue中路由跳转传参数有多种,自己常用的是下面的几种 通过router-link进行跳转 通过编程导航进行路由跳转 本文主要给大家介绍了关于vue路由参数传递遇到的一些坑,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧. 首先我的路由的定义 { path: '/b', name: 'B', component: resolve => require(['../pages/B.vue'], resolve) } 我从A组件跳转到B组件,并通过路由信息对象传递一些参数 this

  • vue-router重定向和路由别名的使用讲解

    一.重定向(你访问这个路径,但他跳到另一个路径,地址栏中显示目标路由的那个路径) "重定向"的意思是,当用户访问 /a时,URL 将会被替换成 /b,然后匹配路由为 /b 二.路由别名(就是给这个路由起了个名字,访问这个路由的时候不需要访问path 而是访问alias后面的) /a 的别名是 /b,意味着,当用户访问 /b 时,URL 会保持为 /b,但是路由匹配则为 /a,就像用户访问 /a 一样. 上面对应的路由配置为: const router = new VueRouter({

  • Vue路由 重定向和别名的区别说明

    重定向 重定向也是通过 routes 配置来完成,下面例子是从 /a 重定向到 /b: const router = new VueRouter({ routes: [ { path: '/a', redirect: '/b' } ] }) 重定向的目标也可以是一个命名的路由: const router = new VueRouter({ routes: [ { path: '/a', redirect: '/b' } ] }) 甚至是一个方法,动态返回重定向目标: const router =

  • vue路由跳转传递参数的方式总结

    日常业务中,路由跳转的同时传递参数是比较常见的,传参的方式有三种: 1)通过动态路由方式 //路由配置文件中 配置动态路由 { path: '/detail/:id', name: 'Detail', component: Detail } //跳转时页面 var id = 1; this.$router.push('/detail/' + id) //跳转后页面获取参数 this.$route.params.id 2)通过query属性传值 //路由配置文件中 { path: '/detail

  • vue路由跳转传参数的方法

    vue中路由跳转传参数有多种,自己常用的是下面的几种 通过router-link进行跳转 通过编程导航进行路由跳转 1. router-link <router-link :to="{ path: 'yourPath', params: { name: 'name', dataObj: data }, query: { name: 'name', dataObj: data } }"> </router-link> 1. path -> 是要跳转的路由路径

  • Vue路由传递参数与重定向的使用方法总结

    目录 前言 概念 1.vue路由传参 2.vue路由重定向 实际使用场景 路由传参 1.使用步骤 2.params传参 2-1.路由属性配置参数 3.query传参 4.url字符串拼接 5.接收路由参数的方法,分 ? 和 : 两种接收方式 6.路由传参的示例 路由重定向 1.路由重定向语法 2.实际示例 其他 拓展 最后 前言 前端开发过程中,作为前端开发者来说关于vue的使用并不陌生,vue相关常用的知识点也是非常重要的,不管是在实际开发中还是在求职面试中都很重要.在vue使用中,路由相关的

  • Spring Boot/VUE中路由传递参数的实现代码

    在路由时传递参数,一般有两种形式,一种是拼接在url地址中,另一种是查询参数.如:http://localhost:8080/router/tang/101?type=spor&num=12.下面根据代码看一下,VUE 和 Spring Boot 中各自是如何处理传递和接受参数的. Spring Boot package com.tang.demo1.controller; import org.springframework.web.bind.annotation.*; @RestContro

  • Vue router传递参数并解决刷新页面参数丢失问题

    Vue Router 传参方式: 1. this.$router.push({ name: '模块名称', params: { // 各参数 } }) router.js: export default new Router({ routes: [ { path: '/paramsPassingByRouter', component: ParamsPassingByRouter, children: [ { path: 'paramsMode', name: 'paramsMode', com

  • 浅谈angular4.0中路由传递参数、获取参数最nice的写法

    研究ng4的官网,终于找到了我想要的方法.我想要的结果是用'&'拼接参数传送,这样阅读上是最好的. 否则很多'/'的拼接,容易混淆参数和组件名称. 一般我们页面跳转传递参数都是这样的格式: http://angular.io/api?uid=1&username=moon 但是在SPA单页应用中却是下面的结果居多[初级视频都是这样敷衍的] http://angular.io/api/1/moon 那么怎么实现我说的结果呢? 重点开始了. 实现从product页面跳转到product-det

  • Flutter路由传递参数及解析实现

    上一篇Flutter页面路由及404路由拦截实现介绍了使用路由来实现页面的跳转,从而简化页面之间的耦合,并可以实现路由拦截.在实际开发中,我们经常会需要在页面跳转的时候携带路由参数,典型的例子就是从列表到详情页的时候,需要携带详情的 id,以便详情页获取对应的数据.同时,有些时候还需要返回时携带参数返回上一级,以便上级页面根据返回结果更新.本篇将介绍这两种情形的实现. Navigator 的 push 和 pop方法 Navigator 导航器的 push 和 pop 方法可以携带参数在页面间传

  • 简述vue路由打开一个新的窗口的方法

    简单说一下vue路由如何打开一个新的窗口 1.router-link标签 在vue的官方文档中 看到这大家应该会想,既然router-link不支持target="_blank"属性,那我们该怎么用router-link打开一个新的窗口呢?别急,继续往下看~ 文档中还有一处描述 router-link添加tag="li"属性后,居然可以变成li标签渲染出来,真特么神奇哈,那可不可以写成tag="a",从而去替代a标签呢?我们尝试着写一哈 <

  • vue路由history模式页面刷新404解决方法Koa Express

    目录 为什页面刷新会出现404 Node服务使用Koa框架 Node服务使用Express框架 为什页面刷新会出现404 因为vue项目中路由hash模式改为了history模式,由于hash模式时url带的#号后面是哈希值不会作为url的一部分发送给服务器,而history模式下当刷新页面之后浏览器会直接去请求服务器,而服务器没有这个路由,于是就出现404. 那为什么页面跳转就是正常的?跳转时其实不是通过请求服务器的,而是通过js操作history的API改变地址完成的. 建议:非C端系统可以

  • Vue路由之JWT身份认证的实现方法

    一.JWT身份认证简介 JSON Web Token(JWT)是目前最流行的跨域身份验证解决方案,相较于session机制,服务器就不需要保存任何 session 数据了,也就是说,服务器变成无状态了,从而比较容易实现扩展.JWT 实际上是一个令牌(Token),服务器会将一些元数据.指定的secret进行签名并生成token,并返回给客户端,客户端得到这个服务器返回的令牌后,需要将其存储到 Cookie 或 localStorage 中,此后,每次与服务器通信都要带上这个令牌,可以把它放到 C

  • Fragment跳转时传递参数及结果回传的方法(推荐)

    今天总结一下Fragment间的参数传递及结果返回的方法. 效果图: 1.点击"加载第二个Fragment按钮",加载出第二个Fragment,同时传递过去参数:"从Fragment1传来的参数"这几个String: 2.当用户点击第二个Fragment中的几个图片时,将点中的结果返回给第一个Fragment,将用户的选择在第一个Fragment显示出来 一.基本架构搭建 首先,我们要把整个架构搭起来,然后再进行参数传递和回传 (一).基本XML构建: 根据上面的效

  • PHP 伪静态隐藏传递参数名的四种方法

    伪静态方法一: 复制代码 代码如下: <?php //伪静态方法一 // localhost/php100/test.php?id|1@action|2 $Php2Html_FileUrl = $_SERVER["REQUEST_URI"]; echo $Php2Html_FileUrl."<br>"; // /php100/test.php?id|1@action|2 $Php2Html_UrlString = str_replace("

随机推荐