这几天在制作上拉加载,这里总结一下。
- 通过console.log打印待检验数据,如果提示该数据为__ob__: Observer,则可使用下面的方式强制转换
//先转为字符串,再转为json
JSON.parse(JSON.stringify(oldData))
- 数组、json不同的合并方式
数组
//使用时注意先后
oldData = oldData.concat(newData);
json
//正确方法
oldData = Object.assign({},oldData,newData);
//错误方法
oldData = Object.assign(oldData,newData);
注释:
如果用错误方式写,则oldData永远都是最新内容
这是因为assign的第一个参数是目标对象,后面的才是源对象
Object.assign(target, ...sources);
- 如果服务端传来的数据为json,而该json的键名为数字,则自动按照从小到大顺序排列
//服务端传来的数据为
{
3:{"a","b"},
8:{"a","b"},
7:{"a","b"},
}
//客户端获取的数据为
{
3:{"a","b"},
7:{"a","b"},
8:{"a","b"},
}
因此可能出现服务端明明是倒序排列,到了客户端却是正序的情况,这样上拉加载后,新加载的内容可能跑到上面去了。
- 上拉加载有两种情况,一种是view,一种是scroll-view。
view在配置里写
export default {
onReachBottom(){
this.getData(1);
},
methods: {
getData:function(isnext){
alert(isnext);
}
}
}
scroll-view在组件上激活
<template>
<view class="main">
<scroll-view scroll-x="true" scroll-y="true" @scrolltolower="getData(1)">
</view>
</template>
- 测试时如果遇到数据出错,或无法使用系统函数时,很可能是数据格式错了,可利用console.log按条比对数据格式是否与设计一样,耐心~~
console.log("最新数据,array");
console.log(newData);
console.log("旧数据,json");
console.log(this.oldData);
oldData = oldData.concat(newData);
console.log("合并新旧数据,object");
console.log(oldData);
- PHP在将array转成json时,可能最外围是方括号,可能是花括号,这取决于数组起始键名是否为0
//结果为["a","b","c"]
echo json_encode(array(0=>'a',1=>'b',2=>'c'));
//echo json_encode(array('a','b','c'));
//结果为{"1":"a","2":"b","3":"c"}
echo json_encode(array(1=>'a',2=>'b',3=>'c'));