uniapp 使用uni-simple-router动态传参刷新页面,参数丢失问题

一个处理参数的简单问题,目前查询出来的帖子居然要钱,简直可笑~

确实是只需要修改urlQuery.js即可,改动实际很小。

1. 首先对方法queryGet进行修改:

增加代码 query = { query: JSON.stringify(query) };

直接给原query参数进行重新赋值操作,以确保decode方法无误。因为decode里是对参数内的query键值名做处理的。

queryGet(query) {
    // 直接给原query参数进行重新赋值操作,以确保decode方法无误
    query = { query: JSON.stringify(query) };
    const { encodeURI } = Global.Router.CONFIG; // 获取到路由配置
    let [decode, historyObj, strQuery] = [query, query, ''];
    switch (encodeURI) {
        case true: { // 加密模式
            decode = this.decode(query);
            strQuery = this.encode(decode);
            historyObj = {
                query: encodeURIComponent(JSON.stringify(decode)),
            };
            break;
        }
        case false: { // 不加密模式
            strQuery = this.stringify(query);
            break;
        }
        default: {
            err('未知参数模式,请检查 \'encodeURI\'', true);
        }
    }
    return { strQuery, historyObj, decode };
}

2. 再对encode方法进行修改:

我们对它return前的那一行进行变动,也就是formatQuery +=这里,uni.$u.queryParams是uview提供的方法,你可以自定实现功能函数。

console.log(uni.$u.queryParams({name: lisa, age: 20}));
// 结果为:?name=lisa&age=20

所以params的第一行query: encodeURIComponent(strQuery)是对原逻辑的保留,第二行的...query就是实际真正的路径参数了。

结尾的substring(1),是为了去除对象转URL参数后的第一位的?,如果你自己的方法没有这么反,则不需要。

encode(query, intact = true) {
    let [strQuery, formatQuery] = ['', ''];
    if (query == null) {
        warn('加密参数没有传递,你知道?', true);
        return '';
    }
    if (query.constructor === String) { // 字符串 尝试 转成 对象
        strQuery = JSON.stringify(this.parse(query));
    } else if (query.constructor === Object) { // 直接转成字符串对象即可
        if (Object.keys(query).length === 0) {
            warn('当前参数不满足加密规范!');
            return '';
        }
        strQuery = JSON.stringify(query);
    }
    if (intact) {
        formatQuery = '?';
    }
    // 保留query的原逻辑赋值,使用substring去除第一位的?
    formatQuery += uni.$u.queryParams({
        query: encodeURIComponent(strQuery),
        ...query,
    }).substring(1);
    return formatQuery;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值