Vue3路由中的参数传递

Vue3中也是两种方式传递一个是query,一个是params

下面是传参demo中的几个主要代码

router/index.js

import { createRouter, createWebHistory } from 'vue-router'
import HomeView from '../views/HomeView.vue'

const routes = [
  {
    path: '/',
    name: 'home',
    component: HomeView
  },
  {
    path: '/about',
    name: 'about',
    // route level code-splitting
    // this generates a separate chunk (about.[hash].js) for this route
    // which is lazy-loaded when the route is visited.
    component: () => import(/* webpackChunkName: "about" */ '../views/AboutView.vue')
  },
  {
    path: '/test/:id',
    name: 'test',
    component: () => import('../views/TestView.vue')
  }
]

const router = createRouter({
  history: createWebHistory(process.env.BASE_URL),
  routes
})

export default router

main.js

import { createApp } from 'vue'
import App from './App.vue'
import router from './router'

createApp(App).use(router).mount('#app')

App.vue

<template>
  <nav>
    <router-link to="/">Home</router-link> |
    <router-link to="/about">About</router-link>
  </nav>
  <router-view/>
</template>

<style lang="scss">
#app {
  font-family: Avenir, Helvetica, Arial, sans-serif;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  text-align: center;
  color: #2c3e50;
}

nav {
  padding: 30px;

  a {
    font-weight: bold;
    color: #2c3e50;

    &.router-link-exact-active {
      color: #42b983;
    }
  }
}
</style>

TestView.vue

<template>
  <div class="home">
    <img alt="Vue logo" src="../assets/logo.png">
    <p>{{ msg }}</p>
  </div>
</template>

<script>
// @ is an alias to /src
import router from '@/router';
import { ref } from 'vue'
export default {
  name: 'TestView'
}
</script>

<script setup>
  const msg = ref("")
  // msg.value = router.currentRoute.value.query.id
  msg.value = router.currentRoute.value.params.id
</script>

HomeView.vue

<template>
  <div class="home">
    <img alt="Vue logo" src="../assets/logo.png">
    <p>{{ msg }}</p>
  </div>
</template>

<script>
// @ is an alias to /src
import router from '@/router';
import { ref } from 'vue'
export default {
  name: 'HomeView'
}
</script>

<script setup>
  const msg = ref("")
  // msg.value = router.currentRoute.value.query.id
  msg.value = router.currentRoute.value.query.id
</script>

About.vue

<template>
  <div class="about">
    <h1>This is an about page</h1>
    <button @click="changeUrl('home')">跳转至About</button>
    <button @click="changeUrl('test')">跳转至test</button>
  </div>
</template>

<script>
import router from '@/router';
import { ref,onMounted } from 'vue'
export default {
  name: 'vue-about'
}
</script>

<script setup>
const msg = ref("")
onMounted(() => {
  msg.value = 123456
})
const changeUrl = (name) => {
  // this.$router.push('/home')
  if(name == 'home') {
    router.push({name, query: {id: "12345"}})
  } else {
    router.push({name, params: {id: "123456"}})
  }
}
</script>

<style scoped>

</style>

也可以将上问使用的直接引入router的方式改为下方这样的方式进行引入

import { useRoute,useRouter } from 'vue-router'
//  useRoute 相当于vue2中的this.$route(),表示当前的路由对象
//  useRouter 相当于vue2中的this.$router(),表示全局的路由对象
const router = useRouter()
const curRouter = useRoute()
// 使用上述方式输出传递过来的参数
console.log("router", router.currentRoute.value.query.id)
console.log("curRouter", curRouter.query.id)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值