VueRouter路由传参

Myth丶恋晨 2024-03-27 08:47 197阅读 0赞

1. 前言

本小节我们介绍 VueRouter 路由组件传参。包括 params 传参、query 传参的两种方式。路由传参的知识点非常重要,在日常开发中,我们经常会通过路由传递各种参数,同学们在学完本节后可以将小节中的案例自己动手实现一遍,这样才可以加深印象并熟练掌握。

2. params 传参

使用 params 传参数我们可以分为两个步骤:

  1. 定义路由以及路由接收的参数。
  2. 路由跳转时传入对应参数。
    首先,我们先了解如何定义路由接收的参数:

    const routes = [
    { path: ‘/detail/:name’, name: ‘detail’, component: Detail },
    ]

使用 <router-link></router-link> 的方式跳转路由:

  1. <!-- router-link 跳转 -->
  2. <router-link :to="{name: 'detail', params: {name: 'React 基础学习'}}">2. React 基础学习</router-link>

具体示例:

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  6. <meta http-equiv="X-UA-Compatible" content="ie=edge">
  7. <title>Document</title>
  8. </head>
  9. <body>
  10. <div id="app">
  11. <div>
  12. <router-link to="/">首页</router-link>
  13. </div>
  14. <router-view></router-view>
  15. </div>
  16. </body>
  17. <script src="https://unpkg.com/vue/dist/vue.js"></script>
  18. <script src="https://unpkg.com/vue-router/dist/vue-router.js"></script>
  19. <script type="text/j**ascript">const Detail = Vue.component('detail', {
  20. template: '<div>这是 {
  21. {$route.params.name}} 的详情页面</div>'
  22. })
  23. const Article = Vue.component('myArticle', {
  24. template: `<ul>
  25. <li>
  26. <router-link :to="{name: 'detail', params: {name: 'Vue 计算属性的学习'}}">
  27. 1. Vue 计算属性的学习
  28. </router-link>
  29. </li>
  30. <li>
  31. <router-link :to="{name: 'detail', params: {name: 'React 基础学习'}}">
  32. 2. React 基础学习
  33. </router-link>
  34. </li>
  35. </ul>`
  36. })
  37. const routes = [
  38. { path: '/detail/:name', name: 'detail', component: Detail },
  39. { path: '/', component: Article }
  40. ]
  41. const router = new VueRouter({
  42. routes: routes
  43. })
  44. var vm = new Vue({
  45. el: '#app',
  46. router: router,
  47. data() {
  48. return {}
  49. }
  50. })</script>
  51. </html>

代码解释:
在 JS 代码第 24 行,我们定义了路由 detail,他通过 params 接收一个参数 name。
在组件 Article 中,我们使用 <router-link> 链接要跳转的路由并将参数传入。
在组件 Detail 中,我们将传入的课程名称显示出来。

使用 $router 的方式跳转路由:

  1. // $router 跳转
  2. this.$router.push({
  3. name: 'detail',
  4. params: {
  5. name: 'Vue 教程'
  6. }
  7. })

具体示例:

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  6. <meta http-equiv="X-UA-Compatible" content="ie=edge">
  7. <title>Document</title>
  8. </head>
  9. <body>
  10. <div id="app">
  11. <div>
  12. <router-link to="/">首页</router-link>
  13. </div>
  14. <router-view></router-view>
  15. </div>
  16. </body>
  17. <script src="https://unpkg.com/vue/dist/vue.js"></script>
  18. <script src="https://unpkg.com/vue-router/dist/vue-router.js"></script>
  19. <script type="text/j**ascript">const Detail = Vue.component('detail', {
  20. template: '<div>这是 {
  21. {$route.params.name}} 的详情页面</div>'
  22. })
  23. const Article = Vue.component('myArticle', {
  24. template: `<ul>
  25. <li @click="getDetail('Vue 计算属性的学习')">
  26. 1. Vue 计算属性的学习
  27. </li>
  28. <li @click="getDetail('React 基础学习')">
  29. 2. React 基础学习
  30. </li>
  31. </ul>`,
  32. methods: {
  33. getDetail(name) {
  34. this.$router.push({
  35. name: 'detail',
  36. params: {
  37. name: name
  38. }
  39. })
  40. }
  41. }
  42. })
  43. const routes = [
  44. { path: '/detail/:name', name: 'detail', component: Detail },
  45. { path: '/', component: Article }
  46. ]
  47. const router = new VueRouter({
  48. routes: routes
  49. })
  50. var vm = new Vue({
  51. el: '#app',
  52. router: router,
  53. data() {
  54. return {}
  55. }
  56. })</script>
  57. </html>

代码解释:
在 JS 代码第 31 行,我们定义了路由 detail,他通过 params 接收一个参数 name。
在 JS 代码第 19 行,我们定义了方法 getDetail,该方法通过 $router.push 跳转到详情页面,并传入 name 参数。
在组件 Article 中,我们当点击课程名称的时候调用 getDetail 方法。
在组件 Detail 中,我们将传入的课程名称显示出来。

3. query 传参

使用 query 传参的方法相对简单,只需要在对应路由跳转的时候传入参数即可:
使用 <router-link></router-link> 的方式跳转路由:

  1. <!-- router-link 跳转 -->
  2. <router-link :to="{path: '/detail', query: { id: 1 }}">2. React 基础学习</router-link>

具体示例:

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  6. <meta http-equiv="X-UA-Compatible" content="ie=edge">
  7. <title>Document</title>
  8. </head>
  9. <body>
  10. <div id="app">
  11. <div>
  12. <router-link to="/">首页</router-link>
  13. </div>
  14. <router-view></router-view>
  15. </div>
  16. </body>
  17. <script src="https://unpkg.com/vue/dist/vue.js"></script>
  18. <script src="https://unpkg.com/vue-router/dist/vue-router.js"></script>
  19. <script type="text/j**ascript">const Detail = Vue.component('detail', {
  20. template: '<div>这是 id {
  21. {$route.query.id}} 的详情页面</div>'
  22. })
  23. const Article = Vue.component('myArticle', {
  24. template: `<ul>
  25. <li>
  26. <router-link :to="{path: '/detail', query: {id: 1}}">
  27. 1. Vue 计算属性的学习
  28. </router-link>
  29. </li>
  30. <li>
  31. <router-link :to="{path: '/detail', query: {id: 2}}">
  32. 2. React 基础学习
  33. </router-link>
  34. </li>
  35. </ul>`
  36. })
  37. const routes = [
  38. { path: '/detail', component: Detail },
  39. { path: '/', component: Article }
  40. ]
  41. const router = new VueRouter({
  42. routes: routes
  43. })
  44. var vm = new Vue({
  45. el: '#app',
  46. router: router,
  47. data() {
  48. return {}
  49. }
  50. })</script>
  51. </html>

代码解释:
在组件 Article 中,我们使用 <router-link> 链接要跳转的路由并将参数传入。
在组件 Detail 中,我们通过 $route.query.id 将传入的课程 ID 显示出来。

使用 $router 的方式跳转路由:

  1. // $router 跳转
  2. this.$router.push({
  3. path: '/detail',
  4. query: {
  5. id: 2
  6. }
  7. })

具体示例:

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  6. <meta http-equiv="X-UA-Compatible" content="ie=edge">
  7. <title>Document</title>
  8. </head>
  9. <body>
  10. <div id="app">
  11. <div>
  12. <router-link to="/">首页</router-link>
  13. </div>
  14. <router-view></router-view>
  15. </div>
  16. </body>
  17. <script src="https://unpkg.com/vue/dist/vue.js"></script>
  18. <script src="https://unpkg.com/vue-router/dist/vue-router.js"></script>
  19. <script type="text/j**ascript">const Detail = Vue.component('detail', {
  20. template: '<div>这是 id {
  21. {$route.query.id}} 的详情页面</div>'
  22. })
  23. const Article = Vue.component('myArticle', {
  24. template: `<ul>
  25. <li @click="getDetail(1)">1. Vue 计算属性的学习</li>
  26. <li @click="getDetail(2)">2. React 基础学习</li>
  27. </ul>`,
  28. methods: {
  29. getDetail(id) {
  30. this.$router.push({
  31. path: '/detail',
  32. query: {
  33. id: id
  34. }
  35. })
  36. }
  37. }
  38. })
  39. const routes = [
  40. { path: '/detail', component: Detail },
  41. { path: '/', component: Article }
  42. ]
  43. const router = new VueRouter({
  44. routes: routes
  45. })
  46. var vm = new Vue({
  47. el: '#app',
  48. router: router,
  49. data() {
  50. return {}
  51. }
  52. })</script>
  53. </html>

代码解释:
在 JS 代码第 19 行,我们定义了方法 getDetail,该方法通过 $router.push 跳转到详情页面,并通过 query 传入参数 id。
在组件 Article 中,我们当点击课程名称的时候调用 getDetail 方法。
在组件 Detail 中,我们通过 $route.query.id 将传入的课程 ID 显示出来。

4. 小结

本节,我们带大家学习了路由传参的两种方式。主要知识点有以下几点:

  • 通过 params 传递参数。
  • 通过 query 传递参数。

发表评论

表情:
评论列表 (有 0 条评论,197人围观)

还没有评论,来说两句吧...

相关阅读

    相关 VueRouter

    1. 前言 本小节我们介绍 VueRouter 路由组件传参。包括 params 传参、query 传参的两种方式。路由传参的知识点非常重要,在日常开发中,我们经常会通过

    相关 vue-03--

    和平时的页面跳转一样,我们可能需要在地址栏上传递某些参数,例如,从商品列表页面,跳转的某个商品的详情页面,这个时候,如果是页面跳转的时候,我们会直接在url上跟上一个商品id,