20.0 vue3中使用vue-router路由跳转,参数(query,params)的传递与接收(包括请求操作)

上一篇:

19.0 vue3 ref,reactive赋值的问题以及解决方法_十一月的萧邦-CSDN博客

本篇着重记录在vue3中使用vue-router的跳转方法,以及参数的传递接收等操作

router / index.js

import {createRouter, createWebHashHistory, createWebHistory} from 'vue-router'


const routes = [
    {
        path: '/',
        name: 'Home',
        component: () => import('@/views/Home/Home')
    },
    {
        path: '/about',
        name: 'About',
        component: () => import('@/views/About/About')
    },
    {
        path: '/good-list',
        name: 'GoodList',
        component: () => import('@/views/GoodList/GoodList')
    },
    {
        path: '/good-item/:id',
        name: 'GoodItem',
        component: () => import('@/views/GoodItem/GoodItem')
    },
    {
        path: '/test',
        name: 'Test',
        component: () => import('@/views/Test/Test')
    }
]

const router = createRouter({
    history: createWebHashHistory(),  //hash
    // history: createWebHistory(),  //history
    routes
})

export default router

Home.vue

<template>
  <div>
    <div>Home页面</div>
    <!--    <router-link :to="{path:'/about'}">关于(path跳转)</router-link>-->
    <!--    建议统一采用name-->
    <router-link :to="{name:'About'}">关于(name跳转)</router-link>
    <router-link :to="{name:'GoodList',query:{pageNum:5,type:10}}">商品列表</router-link>
    <router-link :to="{name:'GoodItem',params:{id:999}}">商品详情</router-link>

    <div @click="goAbout">关于</div>
    <div @click="goGoodList">商品列表</div>
    <div @click="goGoodItem">商品详情</div>
  </div>
</template>

<script>
import {useRouter} from "vue-router"

export default {
  name: "Home",
  setup() {
    // useRouter 只能在setup函数中执行
    const router = useRouter()

    function goAbout() {
      // useRouter().push({name: 'About'})  //error 无法跳转,报错  useRouter 只能在setup函数中执行
      router.push({name: 'About'})  //success
    }

    function goGoodList() {
      router.push({name: 'GoodList', query: {pageNum: 5, type: 10}})
    }

    function goGoodItem() {
      router.push({name: 'GoodItem', params: {id: 999}})
    }
    
    return {
      goAbout,
      goGoodList,
      goGoodItem
    }
  }
}
</script>

GoodList.vue 接收query参数,并且模拟数据请求渲染到页面上

<template>
  <div>
    <div>商品列表</div>
    <div>
      <div v-for="item in goodList" :key="item.id">
        <router-link :to="{name:'GoodItem',params:{id:item.id}}"> {{ item.name }}</router-link>
      </div>
    </div>
  </div>
</template>

<script>
import {useRoute} from "vue-router"   //1.引入useRoute
import {ref} from "vue";

export default {
  name: "GoodList",
  setup() {
    let {pageNum, type} = useRoute().query  //2.获取要传递的参数
    let queryParams = {
      pageSize: 5,
      pageNum: pageNum || 1,
      type: type || 1,
    }
    let goodList = ref([])

    getGoodList()  //获取商品列表数据

    async function getGoodList() {
      goodList.value = await httpGetGoodList()
      console.log(goodList.value)
    }

    function httpGetGoodList() {
      console.log('要进行请求的商品列表参数', queryParams); //进行请求的操作
      return new Promise((resolve, reject) => {
        setTimeout(() => {
          resolve([
            {id: 15, name: '森马男士上衣'},
            {id: 25, name: '安踏男士上衣'},
            {id: 45, name: '美特斯邦威男士上衣'},
            {id: 100, name: '特步男士上衣'},
            {id: 30, name: '361男士上衣'}
          ])
        }, 500)
      })
    }

    return {
      goodList
    }
  }
}
</script>

GoodItem.vue  接收params参数,模拟数据请求

<template>
  <div>商品名称:{{ good.name }}</div>
  <div>商品价格:{{ good.price }}</div>
  <div>品牌简介:{{ good.info }}</div>
</template>

<script>
import {useRoute} from "vue-router";  //1.引入useRoute
import {reactive, toRefs} from "vue";

export default {
  name: "GoodItem",
  setup() {
    let {id} = useRoute().params // 2.获取params参数
    let state = reactive({
      good: {}
    })

    getGoodInfo()

    async function getGoodInfo() {
      state.good = await httpGetGoodInfo()
    }

    function httpGetGoodInfo() {
      console.log('要进行请求的商品id===>', id)
      return new Promise((resolve, reject) => {
        setTimeout(() => {
          resolve({
            name: '上衣',
            price: 299,
            info: '马SEM/R创立于1996年,是市场领先的国民生活时尚品牌,持续为中国新时代青年提供多场景穿搭,高品质,高性价比的服饰产品,并传递自信,融入,亲切,有趣和舒服的生活方式'
          })
        }, 500)
      })
    }

    return {
      ...toRefs(state)
    }
  }
}
</script>

结束!

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
Vue 3 ,你可以使用 Vue Router 进行路由跳转。下面是一些基本的步骤: 1. 首先,确保你已经安装了 Vue Router。你可以通过运行以下命令来安装它: ``` npm install vue-router@next ``` 2. 在你的主文件(例如 `main.js` 或 `main.ts`)导入 Vue Router 和你的路由配置: ```javascript import { createApp } from 'vue'; import { createRouter, createWebHistory } from 'vue-router'; import App from './App.vue'; import Home from './views/Home.vue'; import About from './views/About.vue'; const routes = [ { path: '/', component: Home }, { path: '/about', component: About } ]; const router = createRouter({ history: createWebHistory(), routes }); const app = createApp(App); app.use(router); app.mount('#app'); ``` 在上面的示例,我们创建了两个路由:`/` 对应 `Home` 组件,`/about` 对应 `About` 组件。你可以根据自己的需求添加更多的路由。 3. 在你的组件使用路由跳转,你可以使用 `<router-link>` 组件或 `$router.push` 方法。 使用 `<router-link>` 组件: ```html <router-link to="/">Home</router-link> <router-link to="/about">About</router-link> ``` 使用 `$router.push` 方法: ```javascript // 在方法调用 methods: { goToHome() { this.$router.push('/'); }, goToAbout() { this.$router.push('/about'); } } // 或者在模板调用 <button @click="$router.push('/')">Go to Home</button> <button @click="$router.push('/about')">Go to About</button> ``` 这样,当用户点击链接或按钮时,路由就会进行跳转。 这只是一个基本的示例,你还可以使用更多的 Vue Router 功能,如路由参数、嵌套路由路由守卫等。你可以参考 Vue Router 的官方文档来了解更多信息。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Jay丶萧邦

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值