Taro 小程序跳转页面选择带数据返回上一页面

import { VipCodeResponse } from '@/modules/mine/model/UserMemberProperty';
import { buildQueryParams } from '@/utils/query.utils';
import Taro from '@tarojs/taro';

type MemberCartInfo = VipCodeResponse & { isEquityCard?: boolean };

/** 创建跳转页面选择辅助函数 */
const createChooseHelperEvents = <T, F>({
  url,
  name
}: {
  /** url 参数 */
  url: string;
  /** 监听器名称 */
  name: string;
}): {
  /** 选择页面函数 */
  choose: (data: T) => void;
  /** 跳转到选择页面函数 */
  toChoose: (params: F) => Promise<T>;
} => {
  return {
    choose: (data) => {
      const pages = Taro.getCurrentPages();
      const currentPage = pages[pages.length - 1];
      const eventChannel = currentPage.getOpenerEventChannel();
      eventChannel.emit(name, data);
    },
    toChoose: (params) => {
      return new Promise<T>((resolve, reject) => {
        Taro.navigateTo({
          url: `${url}?${buildQueryParams(params)}`,
          events: {
            [name]: (data: T) => {
              data ? resolve(data) : reject();
            }
          }
        });
      });
    }
  };
};

const { choose: chooseMembershipCard, toChoose: toChooseMembershipCard } = createChooseHelperEvents<
  MemberCartInfo,
  any
>({
  url: '/pages/mine/membership/choose-membership-card/index',
  name: 'chooseMembershipCard'
});

export { chooseMembershipCard, toChooseMembershipCard };

posted @   懒惰ing  阅读(127)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek “源神”启动!「GitHub 热点速览」
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· C# 集成 DeepSeek 模型实现 AI 私有化(本地部署与 API 调用教程)
· DeepSeek R1 简明指南:架构、训练、本地部署及硬件要求
· NetPad:一个.NET开源、跨平台的C#编辑器
点击右上角即可分享
微信分享提示