原生小程序如何实现跨页面传值

需求:每次点击确定按钮的时候,需要将本页面的数据,带到上个页面中,如何最简单最优的实现呢?废话不多说,直接上代码。

util.js源码:

ini 复制代码
export function setPrePageData(dataObject, addType = "update", refresh = false) {
    const pages = getCurrentPages(); // 获取页面栈
    if (pages.length < 2) {
        console.error("没有上一个页面,无法设置数据");
        return;
    }
    const prevPage = pages[pages.length - 2]; // 获取上一个页面
    console.log("addType", addType);
    if (addType == "update") {
        prevPage.setData(dataObject); // 动态设置多个键值对
        if (prevPage && typeof prevPage.refresh === 'function' && refresh == true) {
            prevPage.refresh();
        }
    } else if (addType == "add") {
        // 拼接数据到上一个页面的数据数组第一个
        const keyName = Object.keys(dataObject)[0];
        const currentData = getNestedValue2(prevPage.data, keyName) || [];
        const newData = [dataObject[keyName]];

        // 使用工具函数设置嵌套数据
        const updatedData = [...newData, ...currentData];
        setNestedValue2(prevPage.data, keyName, updatedData);
        if (prevPage && typeof prevPage.refresh === 'function' && refresh == true) {
            prevPage.refresh();
        }
        // 更新页面数据
        prevPage.setData({
            [keyName]: updatedData,
        });
    }
    wx.navigateBack(); // 返回上一个页面
},

// 获取嵌套属性值的工具函数
const getNestedValue2 = (obj, path) => {
    return path.split(".").reduce((acc, key) => acc && acc[key], obj);
};

// 设置嵌套属性值的工具函数
const setNestedValue2 = (obj, path, value) => {
    const keys = path.split(".");
    const lastKey = keys.pop();
    const target = keys.reduce((acc, key) => (acc[key] = acc[key] || {}), obj);
    target[lastKey] = value;
};
    

页面中使用:

kotlin 复制代码
import { validateForm, formatTime,setPrePageData } from "@utils/util.js";
// 不传数据,返回到上一个页面,只做刷新
setPrePageData({},"update",true)
// 传递数据,返回到上一个页面,同时刷新页面
 setPrePageData({ searchData: e.detail}, 'update', true);
 // 只传递数据,返回到上一个页面,不做任何操作
 setPrePageData({ searchData: this.data.waybillCheckedList })

页面中接收:

  1. utils.JS文件中,通过prevPage.setData()方法,将数据进行了双向同步,你可以理解为,在页面返回的同时,将数据进行了同步更新,所以不需要可以接收,直接通过this.data.searchData进行取值即可
  2. 如果要对返回的值,做特殊处理,可以使用watch进行监听,或者在onShow生命周期里进行处理,本文主要使用第二种:
kotlin 复制代码
onShow() {
        // 从添加库位页面进入
        if (this.data.searchData && Object.keys(this.data.searchData).length > 0 ) {
            this.setData({
                warehouseId: this.data.searchData.warehouseAddressId
            })
            setTimeout(() => {
                // 从新调取接口,刷新数据
                this.initData()
            }, 500);
        }
    },

END...

相关推荐
掘了3 分钟前
「2025 年终总结」在所有失去的人中,我最怀念我自己
前端·后端·年终总结
崔庆才丨静觅6 分钟前
实用免费的 Short URL 短链接 API 对接说明
前端
崔庆才丨静觅28 分钟前
5分钟快速搭建 AI 平台并用它赚钱!
前端
崔庆才丨静觅1 小时前
比官方便宜一半以上!Midjourney API 申请及使用
前端
Moment1 小时前
富文本编辑器在 AI 时代为什么这么受欢迎
前端·javascript·后端
崔庆才丨静觅1 小时前
刷屏全网的“nano-banana”API接入指南!0.1元/张量产高清创意图,开发者必藏
前端
剪刀石头布啊1 小时前
jwt介绍
前端
爱敲代码的小鱼1 小时前
AJAX(异步交互的技术来实现从服务端中获取数据):
前端·javascript·ajax
Cobyte2 小时前
AI全栈实战:使用 Python+LangChain+Vue3 构建一个 LLM 聊天应用
前端·后端·aigc
NEXT062 小时前
前端算法:从 O(n²) 到 O(n),列表转树的极致优化
前端·数据结构·算法