Vue--Router--router-link と this.$router.push--use/difference

元の URL: Vue--Router--router-link と this.$router.push--use/difference - プログラマー募集

序章

例証する

        この記事では、Vue Router の宣言型ルーティング ジャンプ (router-link) とプログラムによるルーティング ジャンプ (this.$router.push) を紹介します。

両者の比較

アイテム ルーターリンク this.$router.push
アドバンテージ シンプルで高速 高い柔軟性(高度なカスタマイズ)
欠点 柔軟性が低い (カスタマイズの程度が低い) 書くのがもっと面倒

この 2 つは書き方が異なるだけですが、パラメータを渡す方法はまったく同じです。

ルーティング設定

ルーター/index.js

import Vue from 'vue'
import VueRouter from 'vue-router'
import UserList from '../views/user/UserList'
import UserHome from '../views/user/UserHome'

Vue.use(VueRouter)

const routes = [
  {
    path: '/',
    name: 'Home',
    redirect: '/userList'
  },
  {
    path: '/userList',
    name: 'UserList',
    component: UserList
  },
  {
    path: '/user',
    name: 'UserHome',
    component: UserHome
  }
]

const router = new VueRouter({
  routes
})

export default router

ユーザーホームページ

UserHome.vue

<template>
  <div>
    <div>用户名:{
   
   { userName }}</div>
    <div>用户昵称:{
   
   { nickName }}</div>
    <div>博客数量:{
   
   { blogCount }}</div>
  </div>
</template>

<script>
export default {
  name: 'UserHome',
  data () {
    return {
      userName: '',
      nickName: '',
      blogCount: 0
    }
  },
  methods: {
    getProfile (userName) {
      const _this = this

      // 省略:发请求,通过userName获得用户信息

      const user = {
        userName: userName,
        nickName: '这是昵称',
        blogCount: 121
      }
      _this.userName = user.userName
      _this.nickName = user.nickName
      _this.blogCount = user.blogCount
    }
  },
  created () {
    const userName = this.$route.params.userName
    this.getProfile(userName)
  }
}
</script>

<style scoped>

</style>

ユーザー一覧ページ

UserHome.vue

ルーターリンクの書き方

<template>
  <div class="user-list-container">
    <div class="user-item-box"
         :key="user.userName"
         v-for="user of users">
      <router-link :to="{name: 'UserHome', params: {userName: user.userName}}">
        {
   
   { user.userName }}
      </router-link>
    </div>
  </div>
</template>

<script>
export default {
  name: 'UserList',
  data () {
    return {
      users: {},
      current: 1,
      total: 0,
      size: 10
    }
  },
  methods: {
    page (current, size) {
      const _this = this

      const users = [
        {
          id: 1,
          userName: 'Tony',
          nickName: '刀刃'
        }, {
          id: 2,
          userName: 'Pepper',
          nickName: '天蓝'
        }
      ]
      _this.users = users
      _this.current = current
      _this.total = 122
      _this.size = users.length
    }
  },
  created () {
    this.page(1, 10)
  }
}
</script>

<style scoped>

</style>

テスト

this.$router.push 書き込み

<template>
  <div class="user-list-container">
    <div class="user-item-box"
         :key="user.userName"
         v-for="user of users"
         @click="toUserHome(user.userName)">
      <div>{
   
   {user.userName}}</div>
    </div>
  </div>
</template>

<script>
export default {
  name: 'UserList',
  data () {
    return {
      users: {},
      current: 1,
      total: 0,
      size: 10
    }
  },
  methods: {
    page (current, size) {
      const _this = this

      const users = [
        {
          id: 1,
          userName: 'Tony',
          nickName: '刀刃'
        }, {
          id: 2,
          userName: 'Pepper',
          nickName: '天蓝'
        }
      ]
      _this.users = users
      _this.current = current
      _this.total = 122
      _this.size = users.length
    },
    toUserHome (userName) {
      this.$router.push({ name: 'UserHome', params: { userName: userName } })
    }
  },
  created () {
    this.page(1, 10)
  }
}
</script>

<style scoped>

</style>

テスト

おすすめ

転載: blog.csdn.net/feiying0canglang/article/details/126215335