• Vue--Router--路由传参的方法


    原文网址:Vue--Router--路由传参的方法_IT利刃出鞘的博客-CSDN博客

    简介

    说明

            本文介绍Vue Router路由传参的方式。

            router-link标签和this.$router.push都可以进行路由跳转,见:此文。本文使用router-link进行示例。

    需求

            本文展示用户列表页面到用户主页的跳转。在用户列表页面点击某个用户后,将这个用户的用户名传递给用户主页页面。

    公共代码

    路由配置

    router/index.js

    1. import Vue from 'vue'
    2. import VueRouter from 'vue-router'
    3. import UserList from '../views/user/UserList'
    4. import UserHome from '../views/user/UserHome'
    5. Vue.use(VueRouter)
    6. const routes = [
    7. {
    8. path: '/',
    9. name: 'Home',
    10. redirect: '/userList'
    11. },
    12. {
    13. path: '/userList',
    14. name: 'UserList',
    15. component: UserList
    16. },
    17. {
    18. path: '/user',
    19. name: 'UserHome',
    20. component: UserHome
    21. }
    22. ]
    23. const router = new VueRouter({
    24. routes
    25. })
    26. export default router

    用户主页

    UserList.vue

    1. <script>
    2. export default {
    3. name: 'UserHome',
    4. data () {
    5. return {
    6. userName: '',
    7. nickName: '',
    8. blogCount: 0
    9. }
    10. },
    11. methods: {
    12. getProfile (userName) {
    13. const _this = this
    14. // 省略:发请求,通过userName获得用户信息
    15. const user = {
    16. userName: userName,
    17. nickName: '这是昵称',
    18. blogCount: 121
    19. }
    20. _this.userName = user.userName
    21. _this.nickName = user.nickName
    22. _this.blogCount = user.blogCount
    23. }
    24. },
    25. created () {
    26. const userName = this.$route.params.userName
    27. this.getProfile(userName)
    28. }
    29. }
    30. script>
    31. <style scoped>
    32. style>

    传参的方式

    不带参数

    用户列表页面:UserList.vue

    1. <template>
    2. <div class="user-list-container">
    3. <div class="user-item-box"
    4. :key="user.userName"
    5. v-for="user of users">
    6. <router-link :to="{name: 'UserHome'}">
    7. {{ user.userName }}
    8. router-link>
    9. div>
    10. div>
    11. template>
    12. <script>
    13. export default {
    14. name: 'UserList',
    15. data () {
    16. return {
    17. users: {},
    18. current: 1,
    19. total: 0,
    20. size: 10
    21. }
    22. },
    23. methods: {
    24. page (current, size) {
    25. const _this = this
    26. const users = [
    27. {
    28. id: 1,
    29. userName: 'Tony',
    30. nickName: '刀刃'
    31. }, {
    32. id: 2,
    33. userName: 'Pepper',
    34. nickName: '天蓝'
    35. }
    36. ]
    37. _this.users = users
    38. _this.current = current
    39. _this.total = 122
    40. _this.size = users.length
    41. }
    42. },
    43. created () {
    44. this.page(1, 10)
    45. }
    46. }
    47. script>
    48. <style scoped>
    49. style>

    编程式写法:

    this.$router.push({name: "UserHome"})

    用户主页页面:UserHome.vue 

    使用this.$route.params.userName接收参数。(不修改公共代码)

    测试

    params传参

    简介

    传入参数

    1. <router-link :to="{name: 'UserHome', params: {userName: user.userName}}">
    2. xxx
    3. router-link>

    接收参数

    this.$route.params.userName

    缺点

    参数不显示在URL中,刷新页面时参数会丢失。解决方法是:使用动态路由

    用户列表页面:UserList.vue

    1. <template>
    2. <div class="user-list-container">
    3. <div class="user-item-box"
    4. :key="user.userName"
    5. v-for="user of users">
    6. <router-link :to="{name: 'UserHome', params: {userName: user.userName}}">
    7. {{ user.userName }}
    8. router-link>
    9. div>
    10. div>
    11. template>
    12. <script>
    13. export default {
    14. name: 'UserList',
    15. data () {
    16. return {
    17. users: {},
    18. current: 1,
    19. total: 0,
    20. size: 10
    21. }
    22. },
    23. methods: {
    24. page (current, size) {
    25. const _this = this
    26. const users = [
    27. {
    28. id: 1,
    29. userName: 'Tony',
    30. nickName: '刀刃'
    31. }, {
    32. id: 2,
    33. userName: 'Pepper',
    34. nickName: '天蓝'
    35. }
    36. ]
    37. _this.users = users
    38. _this.current = current
    39. _this.total = 122
    40. _this.size = users.length
    41. }
    42. },
    43. created () {
    44. this.page(1, 10)
    45. }
    46. }
    47. script>
    48. <style scoped>
    49. style>

    编程式写法:

    this.$router.push({name: "UserHome", params: {userName: userName}})

    用户主页页面:UserHome.vue 

    使用this.$route.params.userName接收参数。(不修改公共代码)

    测试

    可以看到:刷新页面时参数会丢失。 

    query传参

    简介

    传入参数

    1. <router-link :to="{name: 'UserHome', query: {userName: user.userName}}">
    2. xxx
    3. router-link>

    或者

    1. <router-link :to="{path: '/user', query: {userName: user.userName}}">
    2. xxx
    3. router-link>

    接收参数

    this.$route.query.userName

    优点

    刷新页面时参数不会丢失。

    用户列表页面:UserList.vue

    1. <template>
    2. <div class="user-list-container">
    3. <div class="user-item-box"
    4. :key="user.userName"
    5. v-for="user of users">
    6. <router-link :to="{name: 'UserHome', query: {userName: user.userName}}">
    7. {{ user.userName }}
    8. router-link>
    9. div>
    10. div>
    11. template>
    12. <script>
    13. export default {
    14. name: 'UserList',
    15. data () {
    16. return {
    17. users: {},
    18. current: 1,
    19. total: 0,
    20. size: 10
    21. }
    22. },
    23. methods: {
    24. page (current, size) {
    25. const _this = this
    26. const users = [
    27. {
    28. id: 1,
    29. userName: 'Tony',
    30. nickName: '刀刃'
    31. }, {
    32. id: 2,
    33. userName: 'Pepper',
    34. nickName: '天蓝'
    35. }
    36. ]
    37. _this.users = users
    38. _this.current = current
    39. _this.total = 122
    40. _this.size = users.length
    41. }
    42. },
    43. created () {
    44. this.page(1, 10)
    45. }
    46. }
    47. script>
    48. <style scoped>
    49. style>

    用户主页页面:UserHome.vue 

    1. <template>
    2. <div>
    3. <div>用户名:{{ userName }}div>
    4. <div>用户昵称:{{ nickName }}div>
    5. <div>博客数量:{{ blogCount }}div>
    6. div>
    7. template>
    8. <script>
    9. export default {
    10. name: 'UserHome',
    11. data () {
    12. return {
    13. userName: '',
    14. nickName: '',
    15. blogCount: 0
    16. }
    17. },
    18. methods: {
    19. getProfile (userName) {
    20. const _this = this
    21. // 省略:发请求,通过userName获得用户信息
    22. const user = {
    23. userName: userName,
    24. nickName: '这是昵称',
    25. blogCount: 121
    26. }
    27. _this.userName = user.userName
    28. _this.nickName = user.nickName
    29. _this.blogCount = user.blogCount
    30. }
    31. },
    32. created () {
    33. const userName = this.$route.query.userName
    34. this.getProfile(userName)
    35. }
    36. }
    37. script>
    38. <style scoped>
    39. style>

    测试

    可以发现:

    1. 它的路径是这样显示的:http://192.168.0.104:8080/#/user?userName=Pepper
    2. 刷新页面时参数不会丢失。
  • 相关阅读:
    一道题让你秒懂Java中静态代码块、构造代码块、构造方法、普通代码块、main函数的执行顺序
    系统架构设计专业技能 · 计算机组成与结构
    dhtmlx甘特图marker不随小时移动
    2022-11-06 网工进阶(三十五)---PIM-SM工作原理(组播分发树的形成、ASM、SSM)
    UML之类图
    如何优雅的写 Controller 层代码?
    Ajax相关知识点
    MONAI 叒叒叒更新了(1.0版本),这次在分割,联邦学习,病理图像,MRI重建上有动作
    1688阿里巴巴中国站电商数据官方平台API接口按图搜索1688商品(拍立淘)响应示例说明
    “蔚来杯“2022牛客暑期多校训练营6,签到题GJBMA
  • 原文地址:https://blog.csdn.net/feiying0canglang/article/details/126215316