zoukankan      html  css  js  c++  java
  • 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>
  • 相关阅读:
    iOS开发日记37-app加急审核
    iOS开发日记36-iOS中的依赖注入
    iOS开发日记35-事件处理机制与图像渲染过程
    iOS开发日记34-国际化
    iOS开发日记33-hit-Test
    iOS开发日记32-详解多线程(死锁)
    iOS开发日记31-详解Block
    iOS开发日记30-Autolayout
    springMVC js等文件找不到解决方法
    jQuery UI 中Tabs Ajax载入时出现Http 304的问题
  • 原文地址:https://www.cnblogs.com/wuqilang/p/15110080.html
Copyright © 2011-2022 走看看