如何在vue3+ts项目中使用query和params传参

yizhihongxing

Vue3 + TypeScript项目中,我们可以通过组合使用 paramsquery 来实现路由传参。下面是具体的步骤:

1. 安装路由

首先,我们需要通过 npm 或者 yarn 来安装 vue-router 路由插件。可以使用以下命令进行安装:

npm install vue-router
yarn add vue-router

2. 创建路由

安装 vue-router 后,我们需要在 src/router/index.ts 中创建路由并配置相应路由规则。下面是示例代码:

// src/router/index.ts

import { createRouter, createWebHistory, RouteRecordRaw } from "vue-router";
import Home from "@/views/Home.vue";
import About from "@/views/About.vue";
import Article from "@/views/Article.vue";

const routes: Array<RouteRecordRaw> = [
  { path: "/", name: "Home", component: Home },
  { path: "/about", name: "About", component: About },
  // Article 路由规则中包含了动态路由参数 ":id"
  { path: "/article/:id", name: "Article", component: Article }
];

const router = createRouter({
  history: createWebHistory(),
  routes,
});

export default router;

上面的路由规则在 routes 数组中进行配置,其中包含了三个路由规则:

  • / 路由指向 Home.vue 组件
  • /about 路由指向 About.vue 组件
  • /article/:id 路由指向 Article.vue 组件,其中 :id 是动态路由参数

3. 在组件中使用路由传参

有两种方式可以在组件中使用路由传参,分别是 paramsquery

3.1 使用 params 传参

params 是一种将参数存储在路由路径中的方式,它以冒号(:)开头,可以在组件的 props 中通过 route 对象来获取参数。下面是示例代码:

// src/views/Article.vue

<template>
  <div>
    <h1>文章标题:{{ title }}</h1>
    <p>文章内容:{{ content }}</p>
  </div>
</template>

<script lang="ts">
import { defineComponent } from "vue";

export default defineComponent({
  props: ["route"],
  computed: {
    // 从 route.params 中获取 id 参数
    id(): string {
      return this.route.params.id;
    },
    title(): string {
      // 根据 id 查询文章标题
      // 此处省略具体代码
      return "文章" + this.id + "的标题";
    },
    content(): string {
      // 根据 id 查询文章内容
      // 此处省略具体代码
      return "文章" + this.id + "的内容";
    },
  },
});
</script>

上面的代码中,通过在路由规则中定义 :id 参数,将 id 传递给了 Article.vue 组件。组件中使用 props 接收 route 对象,并从中获取 id 参数来查询文章标题和内容。

3.2 使用 query 传参

params 不同,query 参数是一种存储在路由查询字符串中的方式,比如在 URL 中添加 ?id=1。在组件中,可以通过 $route.query 或者 router.history.current.query 来获取 query 参数。下面是示例代码:

// src/views/Article.vue

<template>
  <div>
    <h1>文章标题:{{ title }}</h1>
    <p>文章内容:{{ content }}</p>
  </div>
</template>

<script lang="ts">
import { defineComponent } from "vue";
import { useRouter } from "vue-router";

export default defineComponent({
  data() {
    return {
      id: "",
    };
  },
  computed: {
    title(): string {
      // 根据 id 查询文章标题
      // 此处省略具体代码
      return "文章" + this.id + "的标题";
    },
    content(): string {
      // 根据 id 查询文章内容
      // 此处省略具体代码
      return "文章" + this.id + "的内容";
    },
  },
  created() {
    // 使用 useRouter 获取当前路由的 query 参数
    const router = useRouter();
    // 从 query 中获取 id 参数
    this.id = router.history.current.query.id;
  },
});
</script>

上面的代码中,使用 useRouter 获取当前路由的 query 参数,并将其中的 id 参数存储在组件的 data 中供后续使用。

4. 示例说明

我们假设现在有一个文章列表页面,点击文章标题可以跳转到对应文章的详情页面。我们可以通过如下方式来实现:

<!-- src/views/Home.vue -->

<template>
  <div>
    <h1>文章列表</h1>
    <ul>
      <li v-for="(article, index) in articles" :key="index">
        <router-link :to="{ name: 'Article', params: { id: article.id } }">{{ article.title }}</router-link>
      </li>
    </ul>
  </div>
</template>

<script lang="ts">
import { defineComponent } from "vue";

export default defineComponent({
  data() {
    return {
      articles: [
        { id: "1", title: "文章1" },
        { id: "2", title: "文章2" },
        { id: "3", title: "文章3" },
      ],
    };
  },
});
</script>

上面的代码中,在文章标题上使用 router-link 组件将路由指向 Article.vue 组件,并通过 params 传递了 id 参数。在 Article.vue 中,可以通过 $route.params.id 获取到 id 参数。

另外,我们也可以通过查询字符串来实现文章详情页的跳转:

<!-- src/views/Home.vue -->

<template>
  <div>
    <h1>文章列表</h1>
    <ul>
      <li v-for="(article, index) in articles" :key="index">
        <router-link :to="{ name: 'Article', query: { id: article.id } }">{{ article.title }}</router-link>
      </li>
    </ul>
  </div>
</template>

<script lang="ts">
import { defineComponent } from "vue";

export default defineComponent({
  data() {
    return {
      articles: [
        { id: "1", title: "文章1" },
        { id: "2", title: "文章2" },
        { id: "3", title: "文章3" },
      ],
    };
  },
});
</script>

上面的代码中,在查询字符串中传递了 id 参数,可以通过 $route.query.id 获取到参数值。在 Article.vue 组件中,使用 useRouter 来获取 query 参数。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:如何在vue3+ts项目中使用query和params传参 - Python技术站

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

相关文章

  • 详解vue-cli下ESlint 配置说明

    下面我将为你提供详细的“详解vue-cli下ESlint 配置说明”的攻略。 1. 前言 ESLint 是一个可以帮助我们约束代码风格的工具,Vue CLI 集成了 ESLint,我们可以直接在 Vue 项目里进行代码风格检查。如果要通过 ESLint 实现代码的自动修复功能,需要借助于 Prettier 这个代码格式化工具。 2. ESLint 配置文件 …

    Vue 2023年5月28日
    00
  • websocket在springboot+vue中的使用教程

    下面是关于使用WebSocket在Spring Boot和Vue中的完整攻略。 WebSocket 在 Spring Boot 和 Vue 中的使用教程 什么是 WebSocket? WebSocket 是 HTML5 提供的一种在单个 TCP 连接上进行全双工通讯的协议。WebSocket 使得客户端和服务器之间的数据交换变得更加简单、更便捷,且可以实现低…

    Vue 2023年5月28日
    00
  • vue中 数字相加为字串转化为数值的例子

    在 Vue 中,有时候我们需要将一个字符串类型的数字转换为数字类型,这时候我们可以使用 + 运算符,将字符串类型的数字转换为数字类型。下面是一个将字符串类型的数字相加运算后,将结果转换为数字类型的例子: <template> <div> <input type="text" v-model="num…

    Vue 2023年5月27日
    00
  • rollup3.x+vue2打包组件的实现

    下面是rollup3.x+vue2打包组件的实现攻略: 什么是Rollup Rollup是一个JavaScript模块打包器,可以将小块代码编译成大块复杂的代码,它专注于ES模块的打包。 Rollup和Vue组件库打包 Vue组件库是一种常见的前端开发方式,它可以将页面中可复用的组件单独封装成一个独立的组件库,使用时只需要引用该组件库就可以方便地使用这些组件…

    Vue 2023年5月28日
    00
  • Vue中金额、日期格式化插件@formatjs/intl的使用及说明

    Vue中金额、日期格式化插件@formatjs/intl的使用及说明 简介 @formatjs/intl 是一个用于处理数字、日期、货币等多种格式化需求的插件。可以在 Vue 中方便地使用它来对各种格式进行处理。 安装 在项目中安装@formatjs/intl: npm install @formatjs/intl 同时,需要安装@formatjs/intl…

    Vue 2023年5月27日
    00
  • Vue实现文件上传和下载功能

    实现文件上传和下载功能是Web应用开发中经常需要涉及的功能之一,Vue作为一款流行的前端框架也能够提供方便灵活的实现方式。下面是详细的攻略过程。 实现文件上传 1. 创建上传组件 首先,我们需要创建一个上传组件。这个组件需要包含一个可以选择文件的按钮和实际上传文件的功能。我们可以使用axios库来发送HTTP请求,从而上传文件。 <template&g…

    Vue 2023年5月28日
    00
  • 解决Nginx 配置 proxy_pass 后 返回404问题

    当使用Nginx进行反向代理时,有时会遇到proxy_pass指向的地址返回404的问题。这个问题可能有很多原因,以下提供一些可能解决问题的方法。 确认proxy_pass指向的地址是否正确 首先确保proxy_pass指向的地址是正确的。可以尝试用curl等工具进行测试,以确认proxy_pass地址的正确性。如下面的示例: location /api/ …

    Vue 2023年5月28日
    00
  • 在Vue中是如何封装axios

    在Vue中,axios库通常用于进行网络请求。为了方便代码复用和管理,我们可以将axios进行封装,封装后的axios可以配置全局的拦截器、预设基础路径、统一处理错误响应等。下面是封装axios的完整攻略: 1. 安装axios 在封装axios之前,我们首先需要安装axios库。在项目根目录下打开终端,输入以下命令进行安装: npm install axi…

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