vue使用动态路由的注意事项

使用动态路由:

views/Home.vue:

<template>
  <div>Home</div>
</template>

views/User.js:

复制代码
<template>
  <div>
    当前用户id:{{id}}
  </div>
</template>
<script>
export default {
  data() {
    return { id: this.$route.params.id }
  },
  created() {
    console.log('created')
  }
}
</script>
复制代码

router.js:

复制代码
import Vue from 'vue'
import VueRouter from 'vue-router'

Vue.use(VueRouter)

import Home from '@/views/Home'
import User from '@/views/User'
const routes = [
  {
    path: '/',
    component: Home
  },
  {
    path: '/user/:id',
    component: User
  }
]

const router = new VueRouter({ mode: 'hash', routes })

export default router
复制代码

App.vue:

<template>
  <div id="app">
    <router-link to='/'>首页</router-link> |
    <router-link to='/user/1'>用户1</router-link> |
    <router-link to='/user/2'>用户2</router-link>
    <router-view></router-view>
  </div>
</template>

效果:

此时,切换用户1或用户2时,路由变了但是页面并没有更新。

原因:当使用动态路由时,从 /user/1 跳转到 /user/2 时,user组件会被复用,这意味着不再走生命周期,所以组件没有更新。

解决办法:

  1、watch

  2、beforeRouteUpdate

复制代码
  watch: {
    $route: {
      handler(newVal) {
        this.id = newVal.params.id
      }
    }
  },
  // beforeRouteUpdate(to, from, next) {
  //   this.id = to.params.id
  //   next()
  // }
复制代码

  3、直接在模板中使用params的值

<template>
  <div>
    当前用户id:{{$route.params.id}}
  </div>
</template>

  4、路由解耦

    ①路由表中添加 props: true

复制代码
const routes = [
  {
    path: '/',
    component: Home
  },
  {
    path: '/user/:id',
    component: User,
    props: true
  }
]
复制代码

    ②User.vue中通过props接收id

复制代码
<template>
  <div>
    当前用户id:{{id}}
  </div>
</template>
<script>
export default {
  props: ['id'],
  data() {
    return {}
  },
  created() {
    console.log('created')
  }
}
</script>
复制代码

 

posted @   吴小明-  阅读(164)  评论(0编辑  收藏  举报
编辑推荐:
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
阅读排行:
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 提示词工程——AI应用必不可少的技术
· 字符编码:从基础到乱码解决
· 地球OL攻略 —— 某应届生求职总结
历史上的今天:
2020-08-06 scoped的规则
点击右上角即可分享
微信分享提示