• 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>
  • 相关阅读:
    获取checkboxlist多选值
    关于SQL Server 2005远程登录的问题。
    安装完vs2005后没有C#,VB.net,网站等模版的解决方法
    md5 加密
    C#中partial关键字
    C# 重载与覆盖
    CSS常用关键字汇总
    C#常用算法
    常用CSS样式属性
    Oracle 查询正在运行的SQL语句
  • 原文地址:https://www.cnblogs.com/wuqilang/p/15110080.html
Copyright © 2020-2023  润新知