【Nuxt3】路由参数(动态路由、嵌套路由)

news/2024/7/10 0:56:10 标签: nuxt3, vue

页面路由参数

  • query 参数

    • 目录

      |- pages
      |  |- foo.vue
      
    • 路由地址

      https://loaclhost:8080/foo?id=1
      
    • 参数获取

      // foo.vue
      <template>
      	<div>
          	id: {{ route.query.id }}
      	</div>
      </template>
      
      <script setup lang="ts">
      const route = useRoute()
      console.log('id:', route.query.id)
      </script>
      
  • params 参数

    • 目录

      |- pages
      |  |- foo-[name]
      |  |  |- [id].vue
      
    • 路由地址

      https://loaclhost:8080/foo-admin/1
      
    • 参数获取

      // [id].vue
      <template>
      	<div>
          	name: {{ route.params.name }}
          	id: {{ route.query.id }}
      	</div>
      </template>
      
      <script setup lang="ts">
      const route = useRoute()
      console.log('name:', route.params.name)
      console.log('id:', route.params.id)
      </script>
      
  • 多层嵌套 params 参数(通常用于捕获404)

    • 目录

      |- pages
      |  |- foo.vue
      |  |  |- [...all].vue
      
    • 路由地址

      https://loaclhost:8080/foo/a
      https://loaclhost:8080/foo/a/b/c
      
    • 参数获取

      // [...all].vue
      <template>
      	<div>
          	单层:{{ route.params.all[0] }}
          	多层: {{ route.params.all[2] }}
      	</div>
      </template>
      
      <script setup lang="ts">
      const route = useRoute()
      console.log('all:', route.params.all)	// array
      </script>
      

服务端路由参数(server/api)

  • 正常参数

    • 目录

      |- server
      |  |- api
      |  |  |- foo.get.ts
      |  |  |- bar.patch.ts		// 后缀对应 method
      
    • 请求地址

      // [method] - get
      useFetch('/api/foo?id=1')
      useFetch('/api/foo', { params: { id: '1' } })
      
      // [method] - post / put / delete / patch ...
      useFetch('/api/bar', { body: { id: '1' }, method: 'patch' })
      
      
    • 参数获取

      // xxx.yyy.ts
      import { H3Event } from 'h3'
      
      export default defineEventHandler(async (event: H3Event) => {
      	const method = getMethod(event)
          const cookie = getCookie(event)
          const { authorization: token } = getHeaders(event)
      	const { href, origin, search } = getRequestURL(event)
        
      	// params 参数
      	const { id } = getQuery(event)
       	// body 参数 - promise
      	const { id } = await readBody(event)
        
      	return {
          	data: {
      			id
          	},
          	meta: {
      			code: 200,
        	  		method,
                	cookie,
                	token,
                	href,
                	origin,
                	search
          	}
      	}
      })
      
  • 动态路由参数(与页面路由差不多,但有些区别)

    • 目录

      // 普通路由
      |- server
      |  |- api
      |  |  |- foo
      |  |  |  |- [id].get.ts
      
      // 嵌套路由
      |- server
      |  |- api
      |  |  |- bar
      |  |  |  |- [...all].get.ts
      
      // 任意嵌套(与上面区别是,上面是指定参数名,任意嵌套则是默认参数名 "_")
      |- server
      |  |- api
      |  |  |- bar
      |  |  |  |- [...].get.ts
      
    • 请求地址

      // 普通路由参数
      useFetch('/api/foo/1')
      
      // 嵌套路由 or 任意嵌套
      useFetch('/api/bar/a/b/c')
      
    • 参数获取

      // xxx.yyy.ts
      import { H3Event } from 'h3'
      
      export default defineEventHandler(async (event: H3Event) => {
        // 嵌套路由不可同时共存,只生效其一
        const { id, all, _ } = getRouterParams(event)
      	// 注意,与页面路由的区别,服务端路由,得到的参数,是 '/' 拼接的字符串,也就是路径字符串。而页面路由则是数组
        
      	return {
      		data: {
            		id,			// 普通路由
            		all,		// 嵌套路由
            		_			// 任意嵌套
          	},
          	meta: {
      			code: 200,
          	}
      	}
      })
      

http://www.niftyadmin.cn/n/5045265.html

相关文章

2023年网络安全市场五大增长热点

IAM和云安全是2023年网络安全市场的两大增长引擎&#xff0c;而第三方风险管理、人工智能安全、内部威胁则是CISO面临的三大挑战和长期增长热点。 根据Team8调查了全球130名CISO后发布的《2023年全球CISO调查报告》&#xff0c;虽然全球经济面临不确定性&#xff0c;但大多数企…

SLA中QPS、TP999等概念

文章目录 一、SLA概念二、TP9991.1 概念1.2 作用 三、QPS3.1 基本概念3.2 公式&#xff1a;3.3 数据库连接池 和 线程池处理请求区别3.4 粗估QPS的计算公式【不知道avg的情况下】 一、SLA概念 参考文档&#xff1a;SLA 二、TP999 1.1 概念 接口的响应TP99线的时间 TP99指的…

springboot+redis+阿里云短信实现手机号登录

SpringbootRedis实现短信验证码发送功能 文章目录 SpringbootRedis实现短信验证码发送功能1.准备工作1.1安装Redis1.2 准备一个阿里云账户 2.创建工程3.代码实现3.1 service层3.2 controller层 4. 测试 1.准备工作 1.1安装Redis 如果是开始学习的话建议安装到自己本机环境下&…

代码随想录算法训练营 动态规划part13

一、最长递增子序列 300. 最长递增子序列 - 力扣&#xff08;LeetCode&#xff09; 前几天算法课上老师讲了 状态定义&#xff1a; dp[i] 的值代表 nums 以 nums[i] 结尾的最长子序列长度。 转移方程&#xff1a; 设 j∈[0,i)&#xff0c;考虑每轮计算新 dp[i] 时&#xf…

FFmpeg音视频分离器(二)

处理逻辑: 1.程序初始化&#xff1a;代码一开始初始化了所需的变量和数据结构&#xff0c;包括输入文件、输出文件的格式上下文以及其他参数。 2.输入文件打开和信息检索&#xff1a;程序尝试打开输入文件&#xff08;in_filename&#xff09;&#xff0c;并检索输入文件中的…

【Spring Cloud】 Gateway配置说明示例

Spring Cloud Gateway 是 Spring Cloud 中的一个项目&#xff0c;它用于构建微服务应用程序的 API 网关。Spring Cloud Gateway 建立在 Spring Boot 和 Spring WebFlux 之上&#xff0c;它提供了许多有用的功能&#xff0c;例如路由、断路器、限流、过滤器等。 在Spring Cloud…

Python经典练习题(二)

文章目录 &#x1f340;题目一&#x1f340;第二题&#x1f340;第三题&#x1f340;第四题&#x1f340;第五题 &#x1f340;题目一 古典问题&#xff1a;有一对兔子&#xff0c;从出生后第3个月起每个月都生一对兔子&#xff0c;小兔子长到第三个月后每个月又生一对兔子&am…

Java 基于微信小程序的学生选课系统

博主介绍&#xff1a;✌程序员徐师兄、7年大厂程序员经历。全网粉丝30W、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 文章目录 第一章&#xff1a; 简介第二章 技术栈第三章&#xff1a; 功能分析第四章 系统设计第五章 系统功…