[vue-router4快速入门] 2.传递参数的两种方式

在实际开发中跳转页面时,我们经常要把上一页的数据传递到下一个页面,比如我们有一个用户列表,在列表页点击了一个用户,进到用户详情页,那么用户详情页就需要知道用户在列表页点击的是哪个用户,然后再展示相应的详情。这时候就需要我们用路由把用户的id传到详情页,在vue-router有两种方式可以传递参数

1)动态路由

动态路由的形式是这样的

/userDetail/:id

我们发现路由里有一个冒号,这就表示它是一个动态路由,我们还是来写一个例子,

1)在views下创建一个新的页面,userDetail.vue
<template>
  <div>用户详情页获取到了id:{{ id }}</div>
</template>

<script>
export default {
  data() {
    return {
      id: '',
    }
  },
  mounted() {},
}
</script>

<style></style>

我们把页面上基本内容写上,现在id是空,因为我们还没有获取

2)在router.js中导入新的页面,并且为它对应上路由
import { createRouter, createWebHistory } from 'vue-router' 
import index from './views/index' 
import list from './views/list' 
import userDetail from './views/userDetail'  // 新增的页面

const routes = [
  {
    path: '/', 
    component: index,
  },
  {
    path: '/list',
    component: list,
  },
  {
    path: '/userDetail/:id', // 新增的路由,前一部分/userDetial是固定路由,后面:id说明是动态路由
    component: userDetail,
  },
]

const router = createRouter({
  history: createWebHistory(),
  routes, 
})

export default router

在列表页我们写点模拟数据,渲染出来一个用户列表,在列表中我们增加router-link,实现跳转页面的效果

<template>
  <div>这里是列表页</div>
  <router-link to="/">点击跳转到首页</router-link>
  <ul>
    <li v-for="item in userList" :key="item.id">
      <router-link :to="'/userDetail/' + item.id"
        >点击查看{{ item.name }}</router-link
      >
    </li>
  </ul>
</template>

<script>
export default {
  data() {
    return {
      userList: [
        {
          name: '亚历山大',
          id: '01',
        },
        {
          name: '凯撒',
          id: '02',
        },
        {
          name: '屋大维',
          id: '03',
        },
      ],
    }
  },
}
</script>

<style></style>

我们可以发现这次我们的router-link里面to属性是有冒号的,说明它现在动态绑定的,前一部分是固定的字符串'/userDetail/',后面加上了当前一项的id,渲染结果是这样的



点击链接我们就可以进入到用户详情页了

这时候我们需要在用户详情页获取传过来的参数了

this.$route.params.id

这样就可以获取到了
需要注意两点
1)这次用的是this.$route,表示当前的路由,跟之前用的this.$router不一样,后者表示我们在router中创建的那个全局管理路由的对象
2)this.$route.params是一个对象,通过动态路由传过来的参数都会放在这个对象里,我们取的是id这个参数,这里的id和路由配置时候'/userDetail/:id'这个id是相对应的
我们在详情页也定义了一个id数据,以便我们使用,放在模板里

<template>
  <div>用户详情页获取到了id:{{ id }}</div>
</template>

<script>
export default {
  data() {
    return {
      id: '',
    }
  },
  mounted() {
    this.id = this.$route.params.id
  },
}
</script>

<style></style>

我们可以看到详情页就可以显示id了


这是通过动态路由传参,初学者可能理解起来比较费劲,要自己动手写一写,下面说一种简单的

2.使用queryString传参

例如

http://www.test.com/?a=1&b=2

在url中问号后面的a=1&b=2,就是queryString,这里表示参数a的值是1,参数b的值是2

放在我们的例子中,我们现在把用户的名字也传到用户详情页,使用queryString的方式来传
像这样

http://localhost:8080/userDetail/03?name=屋大维

改动一下我们渲染列表的代码,

    <li v-for="item in userList" :key="item.id">
      <router-link :to="'/userDetail/' + item.id + '?name=' + item.name"  // 拼接链接的时候增加了name
        >点击查看{{ item.name }}</router-link
      >
    </li>

渲染结果是:



下一步就是获取这个参数了,这么传参有个好处,就是不用更改router.js里面的配置
那么该在用户详情页直接获取了

this.$route.query.name

这次试用query对象,和上次params不一样,
我们的参数名字是name



完整代码是

<template>
  <div>用户详情页获取到了id:{{ id }},他的名字是:{{ name }}</div>
</template>

<script>
export default {
  data() {
    return {
      id: '',
      name: '',
    }
  },
  mounted() {
    this.id = this.$route.params.id
    this.name = this.$route.query.name
  },
}
</script>

<style></style>

这节课我们向页面传递参数的两种方式都学到了,在实际开发中都很常用,大家一定要掌握。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,240评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,328评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,182评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,121评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,135评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,093评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,013评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,854评论 0 273
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,295评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,513评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,678评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,398评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,989评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,636评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,801评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,657评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,558评论 2 352

推荐阅读更多精彩内容