优雅实现uniapp返回上一页传参

在移动端应用中,表单设置组件往往作为独立的页面层级存在,以实现如时间选择等复杂功能。当用户在该组件页面内选定特定时间后,如何将这一选择结果高效、有序地传递回原页面,成为一个颇具挑战性的任务。尽管可以借助Vuex进行全局状态管理以共享数据,但随着项目规模扩大和业务逻辑复杂化,直接依赖Vuex可能导致数据流难以追踪与维护。我们巧妙地运用uni.$emit事件触发机制,封装了一种方法,旨在实现选择结果的优雅传递,既保持代码的清晰性,又确保了数据流动的可控性。以下是对该方法的实现:

1、封装公共js方法:
复制代码
function generateEmitKey() {
  return `ant${new Date().getTime()}${Math.floor(Math.random() * 150)}`;
}

/**
 * 跳转组件/页面选择数据,并携带数据返回接收处理方法
 * @param {Object} data
 * @returns
 */
function commonBackEvent(data = {}) {
  const { path, query = {}} = data
  if (!path) throw new Error('error: path is not undefined')
  return new Promise((resolve, reject) => {
    try {
      const parameter = query?.parameter || generateEmitKey()
      uni.$off(parameter)
      uni.$on(parameter, data => {
        setTimeout(() => {
          resolve(data)
        }, 500)
      })
      router.push({
        path,
        query: {
          ...query,
          parameter
        }
      });
    } catch (error) {
      reject(error)
    }
  })
}
2、原页面使用该方法进行跳转,并接收数据:
复制代码
const data = await commonBackEvent({
  path: 'xxxxxx',
  query: {
    date,
  }
})
3、组件页面选择时间后返回并emit触发:
复制代码
this.$Router.back();
uni.$emit(this.$Route.query.parameter, 'xxx-xxx-xxx');
相关推荐
oden4 分钟前
2025博客框架选择指南:Hugo、Astro、Hexo该选哪个?
前端·html
小光学长14 分钟前
基于ssm的宠物交易系统的设计与实现850mb48h(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。
java·前端·数据库
云中飞鸿18 分钟前
函数:委托
javascript
小小前端要继续努力41 分钟前
渐进增强、优雅降级及现代Web开发技术详解
前端
老前端的功夫1 小时前
前端技术选型的理性之道:构建可量化的ROI评估模型
前端·javascript·人工智能·ubuntu·前端框架
狮子座的男孩2 小时前
js函数高级:04、详解执行上下文与执行上下文栈(变量提升与函数提升、执行上下文、执行上下文栈)及相关面试题
前端·javascript·经验分享·变量提升与函数提升·执行上下文·执行上下文栈·相关面试题
爱学习的程序媛2 小时前
《JavaScript权威指南》核心知识点梳理
开发语言·前端·javascript·ecmascript
乐观主义现代人2 小时前
go 面试
java·前端·javascript
1***Q7843 小时前
前端在移动端中的离线功能
前端
星环处相逢3 小时前
Nginx 优化与防盗链及扩展配置指南
服务器·前端·nginx