昨天接接口时遇到一个问题
请求接口,然后把接口数据json按类型如下代码分类
type:[
//全部
{
content:[
{
}
]
}
//近期活动
{
content:[
{
}
]
}
//考试安排
{
content:[
{
}
]
}
//放假安排
{
content:[
{
}
]
}
]
错误思想:
1、最初我想的是判断类型,直接使用setdata赋值上去
//res.data是请求的数据
this.setData({
"type[1].content":res.data
})
但是这样子,赋值上去不是我想要的结果,直接赋值,会把res.data当成对象的形式,直接传上去。
2、我的目的是想要res.data以数组的形式追加上去,然后就用了push()
this.data.type[1].content.push(res.data)
结果却发现逻辑层跟视图层的数据不匹配,导致页面数据无法渲染
直接追加,在逻辑层会有显示,但是视图层不会得到追加的数据,所以在视图层的数组长度一直为0,导致无法渲染!
解决方法:
方法一:
let type=[
//全部
{
content:[
{
}
]
}
//近期活动
{
content:[
{
}
]
}
//考试安排
{
content:[
{
}
]
}
//放假安排
{
content:[
{
}
]
}
]
let testype=[近期活动,考试安排,放假安排]
res.data.foreach((element,index)=>{
type[0].content.push(element)
if(res.data.newsType=="近期活动"){
type[1].content.push(element)
}
else if(res.data.newsType=="考试安排"){
type[2].content.push(element)
}
else if(res.data.newsType=="放假安排"){
type[3].content.push(element)
}
this.setData({
type:type
})
})
方法二:
let arrType = [{
img:'../../assets/Calendar.png',
bgColor:''
},{
img:'../../assets/test.png',
bgColor:'#F8EFE3'
},{
img:'../../assets/holiday.png',
bgColor:'#ECEBF4'
}] // 近期活动 考试安排 放假安排
export function dataChange(data){
let content = []
for(let i=0;i<data.length;i++){
let name = ['近期活动','考试安排','放假安排']
let arr
for(let y=0;y<name.length;y++){
if(data[i].newsType == name[y]){
arr = {
event:data[i].newsContent,
time:data[i].newsStartTime,
size:'30rpx',
...arrType[y]
}
if(data[i].newsEndTime != null){
arr.time += ' - ' + data[i].newsEndTime
}
break
}
}
content.push(arr)
}
return content
}