Vue3之路由跳转与参数获取方式

下面是关于Vue3路由跳转与参数获取的完整攻略。

1. 安装Vue Router

在开始使用Vue3路由时,需要先安装Vue Router。可以通过npm安装,命令如下:

npm install vue-router@4.0.0-beta.8

安装完成后,在main.js中引入Vue Router并使用。

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

const router = createRouter({
  history: createWebHistory(),
  routes: [...]
})

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

2. 创建路由信息

在路由的配置中需要设置路由的路径与对应的组件。下面是一个简单的路由信息示例:

import Home from './views/Home.vue'
import About from './views/About.vue'

const routes = [
  { path: '/', component: Home },
  { path: '/about', component: About }
]

3. 路由跳转

路由跳转是指在浏览器中切换不同的路由,这可以通过<router-link>标签和router.push方法实现。

3.1 <router-link>标签

以下是一个简单的使用<router-link>标签的跳转方式:

<router-link to="/">Home</router-link>

to属性指定路由的路径。

3.2 router.push方法

在Vue3中,使用this.$router.push()方法实现路由跳转。以下是一个简单的路由跳转示例:

 methods: {
   goToAboutPage() {
     this.$router.push('/about')
   }
 }

4. 参数获取

路由参数是URL中的一部分,通常用于指定页面的特定内容或条件。在Vue3中,可以使用$route对象来获取路由参数。

4.1 获取参数

export default {
  mounted() {
    console.log(this.$route.params.id) // 获取路由参数
  }
}

在路由信息中,可以通过使用path-to-regexp匹配规则来获取参数,以下是一个带参数的路由信息示例:

const routes = [
  { path: '/:id', component: Product }
]

在组件中,通过this.$route.params获取参数值。

4.2 动态改变参数

在Vue3中,可以通过使用$router.push()方法并传递参数,来动态改变路由参数。以下是一个简单的路由参数动态改变示例:

methods: {
  changeRouteParam() {
    this.$router.push({ params: { id: 2 } })
  }
}

示例

示例1:路由跳转与参数获取

在以下实例中,点击一个商品,跳转到商品详情页面并展示当前商品的详细信息。

1. 创建路由信息

import ProductDetail from './views/ProductDetail.vue'

const routes = [
  { path: '/', component: Home },
  { path: '/products/:id', component: ProductDetail, props: true }
]

2. 在Home页面中展示商品列表

<template>
  <div>
    <h2>Products</h2>
    <div v-for="product in products" :key="product.id">
      <h3>{{ product.name }}</h3>
      <p>{{ product.description }}</p>
      <button @click="goToProductDetailPage(product.id)">View Details</button>
    </div>
  </div>
</template>

<script>
export default {
  data() {
    return {
      products: [
        { id: 1, name: 'Product A', description: 'Product A description' },
        { id: 2, name: 'Product B', description: 'Product B description' },
        { id: 3, name: 'Product C', description: 'Product C description' }
      ]
    }
  },
  methods: {
    goToProductDetailPage(id) {
      this.$router.push({ path: `/products/${id}`, props: true })
    }
  }
}
</script>

3. 在ProductDetail页面中展示当前商品的详细信息

<template>
  <div>
    <h2>{{ product.name }}</h2>
    <p>{{ product.description }}</p>
  </div>
</template>

<script>
export default {
  props: {
    id: {
      type: String,
      required: true
    }
  },
  computed: {
    product() {
      return this.products.find(product => product.id == this.id)
    }
  },
  data() {
    return {
      products: [
        { id: 1, name: 'Product A', description: 'Product A description' },
        { id: 2, name: 'Product B', description: 'Product B description' },
        { id: 3, name: 'Product C', description: 'Product C description' }
      ]
    }
  }
}
</script>

示例2:动态改变路由参数

在以下实例中,点击一个按钮,动态切换路由参数。

1. 创建路由信息

import ProductDetail from './views/ProductDetail.vue'

const routes = [
  { path: '/', component: Home },
  { path: '/products/:id', component: ProductDetail, props: true }
]

2. 在Home页面中展示商品列表

<template>
  <div>
    <h2>Products</h2>
    <div v-for="product in products" :key="product.id">
      <h3>{{ product.name }}</h3>
      <p>{{ product.description }}</p>
      <button @click="changeRouteParam(product.id)">View Details</button>
    </div>
  </div>
</template>

<script>
export default {
  data() {
    return {
      products: [
        { id: 1, name: 'Product A', description: 'Product A description' },
        { id: 2, name: 'Product B', description: 'Product B description' },
        { id: 3, name: 'Product C', description: 'Product C description' }
      ]
    }
  },
  methods: {
    changeRouteParam(id) {
      this.$router.push({ params: { id } })
    }
  }
}
</script>

3. 在ProductDetail页面中展示当前商品的详细信息

<template>
  <div>
    <h2>{{ product.name }}</h2>
    <p>{{ product.description }}</p>
    <button @click="changeRouteParam()">Change Route Param to 2</button>
  </div>
</template>

<script>
export default {
  props: {
    id: {
      type: String,
      required: true
    }
  },
  computed: {
    product() {
      return this.products.find(product => product.id == this.id)
    }
  },
  data() {
    return {
      products: [
        { id: 1, name: 'Product A', description: 'Product A description' },
        { id: 2, name: 'Product B', description: 'Product B description' },
        { id: 3, name: 'Product C', description: 'Product C description' }
      ]
    }
  },
  methods: {
    changeRouteParam() {
      this.$router.push({ params: { id: 2 } })
    }
  }
}
</script>

以上就是关于Vue3路由跳转与参数获取的完整攻略,包含了路由信息创建、路由跳转和参数获取,以及两个示例说明。希望可以帮助到你。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Vue3之路由跳转与参数获取方式 - Python技术站

(0)
上一篇 2023年5月27日
下一篇 2023年5月27日

相关文章

  • 原生js实现addClass,removeClass,hasClass方法

    实现addClass、removeClass、hasClass方法,可以方便地向DOM元素添加/移除class样式,同时判断是否存在某个class样式。下面是实现这三个方法的完整攻略: 1. addClass方法实现 实现addClass方法,首先需要获取DOM元素,并向元素添加一个或多个class样式。可以使用classList属性,它返回一个类似数组的对…

    Vue 2023年5月27日
    00
  • vue数组双向绑定问题及$set用法说明

    Vue数组双向绑定问题及$set用法说明: 在Vue框架的开发中,经常需要使用数组来存储数据,并将其展示在页面上。但是,Vue对数组的双向绑定存在一些问题,例如添加或删除数组中的元素时,Vue无法自动更新视图。本攻略将详细讲解Vue数组双向绑定问题及$set用法说明。 Vue数组双向绑定问题: 当我们使用Vue来双向绑定数组时,会遇到以下问题: 添加元素不会…

    Vue 2023年5月27日
    00
  • 深度了解vue.js中hooks的相关知识

    深度了解vue.js中hooks的相关知识 什么是hooks? Vue 3.0 采用了 Composition API,这是一种基于函数的API,包含了许多新的hooks(钩子函数),例如 setup()、onMounted()、onBeforeUnmount() 等。这些新的钩子函数不仅可以让我们更加方便地组合逻辑,还可以提高代码的可读性和可复用性。 基本…

    Vue 2023年5月28日
    00
  • Vue计算属性中reduce方法实现遍历方式

    下面我会详细介绍一下“Vue计算属性中reduce方法实现遍历方式”的攻略。 什么是计算属性? 在Vue中,计算属性是指可以基于已有的属性通过计算得到新值的属性,这种属性可以方便地进行数据绑定和监听,同时也可以进行缓存优化。 reduce方法的实现方式 在Vue的计算属性中,我们可以使用reduce方法来实现遍历的功能,它可以用来累计前面的值,并返回累计结果…

    Vue 2023年5月29日
    00
  • layui实际项目使用过程中遇到的兼容性问题及解决

    我为您详细分享一下“layui实际项目使用过程中遇到的兼容性问题及解决”的完整攻略。 一、问题背景 Layui是一款轻量级的前端UI框架,可用于快速构建具有良好交互体验的前端页面,功能模块化、易于扩展。然而,在实际项目中,我们在使用Layui时,往往会遇到一些兼容性问题。 二、兼容性问题及解决方法 在实际项目中,Layui兼容性问题大致可分为两类:浏览器兼容…

    Vue 2023年5月28日
    00
  • antd日期选择器禁止选择当天之前的时间操作

    首先,采用 antd 中的 DatePicker 组件可以实现日期选择器的功能,同时,针对我们需要的需求——禁止选择当天之前的日期,我们可以采用以下方法来进行实现。 在 DatePicker 中,我们可以通过设置 disabledDate 属性来禁用某些日期。这个属性可以接受一个函数作为参数,用于返回需要禁用的日期数组,或者一个布尔值用于判断是否禁用当前日期…

    Vue 2023年5月29日
    00
  • vue渲染大量数据时卡顿卡死解决方法

    对于Vue渲染大量数据时出现卡顿和卡死的问题,有以下几种解决方法: 1. 利用vue的v-for指令渲染列表时使用分页 对于要渲染大量数据的列表,我们可以通过分页的方式一次渲染一定量的数据,而不是一次性全部渲染,可以有效增强浏览器的性能。这里提供一个简单的分页示例: <template> <div> <ul> <li…

    Vue 2023年5月28日
    00
  • Vue3系列之effect和ReactiveEffect track trigger源码解析

    Vue3系列之effect和ReactiveEffect track trigger源码解析 什么是effect effect 是 Vue3 中新增的一个 API,它的作用是创建一个「响应式副作用」函数。可以把它看作一个自包含的响应式系统,它能够跟踪封装起来的响应式数据,并在数据变化时进行相关操作。 ReactiveEffect 与 track Reacti…

    Vue 2023年5月28日
    00
合作推广
合作推广
分享本页
返回顶部