当前位置: 首页 > news >正文

页面简单传参

#简单的情景:你需要在帖子主页传递参数给帖子详情页面,携带在主页获得的帖子ID。你有以下几种传递方法#

#使用Vue3 + TS#

1. 通过 URL 参数传递(Query 参数)

这是最简单、最常用的方法,ID 会显示在 URL 中的 ? 后面

// 在 Post.vue 或其他组件中
const handleClick = () => {
  router.push({
    path: '/forum/post-detail',
    query: { id: postId }  // 这里的 postId 是你要传递的 ID
  })
}

生成的 URL 会像这样:/forum/post-detail?id=123456

在 post-detail 页面中获取参数:

// 在 PostDetail.vue 中
import { useRoute } from 'vue-router'

const route = useRoute()
const postId = route.query.id // 获取传递的 ID
console.log('帖子ID:', postId)

// 使用 ID 获取帖子详情
onMounted(async () => {
  if (postId) {
    await getPostDetail(postId)
  }
})

2. 通过路径参数传递(Path 参数)

这种方式 ID 直接集成到 URL 路径中,更符合 RESTful 设计。

首先需要在路由配置中定义参数:

// 在 router/index.js 中
const routes = [
  {
    path: '/forum/post-detail/:id',
    name: 'PostDetail',
    component: () => import('@/pages/forum/PostDetail.vue')
  }
]

然后在组件中导航:

// 在 Post.vue 中
const handleClick = () => {
  router.push({
    path: `/forum/post-detail/${postId}`  // 直接拼接到路径中
  })
  
  // 或者使用命名路由(更推荐)
  router.push({
    name: 'PostDetail',
    params: { id: postId }
  })
}

生成的 URL 会像这样:/forum/post-detail/123456

在 post-detail 页面中获取参数:

// 在 PostDetail.vue 中
import { useRoute } from 'vue-router'

const route = useRoute()
const postId = route.params.id // 从路径参数中获取 ID

3. 通过状态对象传递(不显示在 URL 中)

如果你不希望 ID 显示在 URL 中,可以使用 router 的 state 选项:

// 在 Post.vue 中
const handleClick = () => {
  router.push({
    path: '/forum/post-detail',
    state: { postId: postId }  // 通过 state 传递数据
  })
}

 在 post-detail 页面中获取:

// 在 PostDetail.vue 中
import { useRouter } from 'vue-router'

const router = useRouter()
const postId = router.currentRoute.value.state?.postId

// 注意:刷新页面后 state 会丢失!

二、如何选择使用场景

场景推荐方式理由
传递资源 ID 或必要参数URL 路径参数(Params)URL 直观,SEO 友好
分页、搜索等可选参数查询参数(Query)灵活,参数可选
临时传递敏感数据(如表单)路由状态(State)不暴露 URL,内存存储安全
需要持久化的数据(如登录态)本地存储(LocalStorage)数据持久化,刷新不丢失
跨组件共享复杂数据全局状态管理(Vuex/Redux)集中管理,避免层层传递
http://www.dtcms.com/a/111947.html

相关文章:

  • 【Linux】条件变量封装类及环形队列的实现
  • mybatis慢sql无所遁形
  • 学透Spring Boot — 009. Spring Boot的四种 Http 客户端
  • 科技赋能安居梦:中建海龙以模块化革新重塑城市更新范式
  • 多输入多输出 | Matlab实现BO-GRU贝叶斯优化门控循环单元多输入多输出预测
  • 图解AUTOSAR_SWS_LINStateManager
  • prism WPF 模块
  • #SVA语法滴水穿石# (003)关于 sequence 和 property 的区别和联系
  • Mysql 中有哪些日志结构?
  • LeetCode 687 -- 二叉树
  • HTML5+CSS3+JS小实例:带滑动指示器的导航图标
  • 开源且完全没有审核限制的大型语言模型的概述
  • 电力载波单灯控制器:智能照明的关键技术
  • AQS 等待队列中的线程自旋多少次后挂起?
  • 为PXIe控制器配置NI Linux实时操作系统安装软件
  • #python项目生成exe相关了解
  • C++20新增内容
  • 前端页面鼠标移动监控(鼠标运动、鼠标监控)鼠标节流处理、throttle、限制触发频率(setTimeout、clearInterval)
  • 表结构数据的基本特征、获取、加工与使用
  • Java 状态模式 详解
  • 金融机构开源软件生命周期管理实务
  • 模组COF受损制程排查验证及改善
  • 从文本到多模态:如何将RAG扩展为支持图像+文本检索的增强生成系统?
  • 基于 docker 的 Xinference 全流程部署指南
  • shell语言替换脚本、填补整个命令行
  • 知识考量码【蓝桥】
  • leetcode-代码随想录-链表-翻转链表
  • 框架PasteForm实际开发案例,换个口味显示数据,支持echarts,只需要标记几个特性即可在管理端显示(2)
  • Python办公自动化(2)对wordpdf的操作
  • 青少年编程与数学 02-015 大学数学知识点 04课题、微积分