百度小程序s-for绑定的数据为对象时,动态操作页面时显示内容顺序颠倒的解决办法

问题描述: 百度小程序s-for绑定的数据为对象时,如果只做展示无操作,没有问题,但是要操作动态获取对应的值时,页面的显示内容顺序会颠倒,官方文档也并没有说明s-for循环不可以绑定对象,但是微信小程序中则没有出现这个错误,因为我的百度小程序项目是从微信小程序项目中的迁移,这里只在百度小程序中更改。

页面结构:

	<view class='type_box' s-for="item,index in typeJson">
		<view class='title'>{{item.type}}</view>
		<view class='type_item'>
				<block s-for="item2,index2 in item.val">
					<view data-id="{{index}}" data-index="{{index2}}" bindtap="changePro">
						{{item2}}
					</view>
				</block>
		</view>
	</view>

页面展示为:
页面显示
比如当我在点击片数选择2片时,片数这一规格会跑到最下面去,但是对应的规则值却是选中了的,so,就是这么神奇,如下图
页面显示内容颠倒
后端返回的数据类型是一个对象,且相同字段的值也有不同,如typeJson所示,因为项目是从微信小程序的迁移,所以这里前端需要对数据进行处理,转换为数组类型就可以了:

Page({
    data: {
        typeJson: {
            '尺寸/加工方式': { ck: 0, val: { 0: "特大", 2: "小号" } },
            '片数': { ck: 0, val: { 0: "1片", 4: "2片" } },
            '颜色': { ck: 0, val: ["卡通", "纯白"] }
        }
    },
    onLoad() {
        var that = this;
        var arrk = [];
        var obj = that.data.typeJson;
        //将规格数据对象转换为数组格式,因为后端返回的K值是中文字符,这里将其提出;
        //type字段为之前对象的K值,val是原对象中val值为对象转换为数组后的值;
        Object.keys(obj).forEach((item, index) => {
            arrk.push({ type: item, ck: obj[item].ck, val: [], val2: obj[item].val });
        });
        //循环判断arrk中的val值是否为数组或者对象,如果是对象就转换为数组,如果是数组就直接赋值;
        arrk.forEach((item, index) => {
            if (that.judgeType(item.val2) == 'Object') {
                for (let i in item.val2) {
                    item.val.push(item.val2[i])
                }
            } else {
                item.val = item.val2
            }
        })
        that.setData({
            typeJson: arrk
        });
        console.log(that.data.typeJson)
    },
    //判断对象或者数组的方法
    judgeType (obj) {
        var type = Object.prototype.toString.call(obj);
        if (type == '[object Array]') {
            return 'Array';
        } else if (type == '[object Object]') {
            return "Object"
        } else {
            return '';
        }
    },
})

转换输出后的typeJson值和val值就是数组类型啦!
转换后的数据

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值