小程序
小游戏
企业微信
微信支付
扫描小程序码分享
我用wx.navigateTo传递对象ss_xx,然后在显示的页面打印出来,打印的是正确的两条数据,但是一旦this.setData({ss_xx:ss_xx}),输出之后括号显示的是2,但是一展开就是4条
2 个回答
加粗
标红
插入代码
插入链接
插入图片
上传视频
我猜测是没有深度拷贝的原因导致的,尝试对传递的参数做JSON.stringify(ss_xx)处理后再传值。
如果方便的话,提供一下代码片段来看看。
你好,麻烦通过点击下方“反馈信息”按钮,提供出现问题的。
console.log(JSON.stringify(data)) 这么打印
关注后,可在微信内接收相应的重要提醒。
请使用微信扫描二维码关注 “微信开放社区” 公众号
我猜测是没有深度拷贝的原因导致的,尝试对传递的参数做JSON.stringify(ss_xx)处理后再传值。
如果方便的话,提供一下代码片段来看看。
const db = wx.cloud.database()
Page({
//页面的初始数据!!!!!!!!!!!!!!
data: {
ss_xx:[],
_ss_xx:[],
......
},
//生命周期函数--监听页面加载!!!!!!!!!!!!!!
onLoad: function (options) {
var that = this;
console.log("---plate4----");
var ss_xx = JSON.parse(options.ss_xx);
console.log('plate4下的ss_xx:',ss_xx);
that.setData({
ss_xx:ss_xx
})
wx.cloud.callFunction({
name:'login',
data:{}
}).then((res)=>{
console.log("获取到openid:",res.result.openid);
db.collection("user").where({
_openid:res.result.openid
}).get().then((res)=>{
// res.data[0]等同数据库看到用户的信息
console.log("首页登录取到的对应openid的信息:",res.data[0]);
// Object.assign(target, ...sources)用于组合数据到目的对象,会有覆盖
app.userInfo=Object.assign(app.userInfo,res.data[0]);
this.jiazai()
wx.hideLoading()
if(app.userInfo._openid==""){
/*如果没有登录信息则跳转到wd*/
//wx.switchTab({url:"../my/wd/wd"})
//如果没有登录信息则提示未登录
wx.showToast({
title: '未登录只可浏览',
icon:'none',
duration:3000
})
wx.navigateTo({
url: '../index/index',
})
}else{
//登录上了就监听user
this.jianting()
this.setData({
jianting:true,
})
}
})
});
var systeminfo=wx.getSystemInfoSync()
//console.log(systeminfo.windowHeight)
this.setData({
movehight:systeminfo.windowHeight,
movehight2:systeminfo.windowHeight-100
})
},
//刷新!!!!!!!!!!!!!!
shuaxin(){
this.setData({
shuaxin:"",
search:"",
kong:false
})
var shuaxin=true
this.jiazai(shuaxin)
},
//生命周期函数--监听页面初次渲染完成
onReady: function () {
//写出一周前的时间戳
var now=new Date().getTime()//现在的时间
var yizhou=(now-3600*7000*24)
console.log("现在:",now)
console.log("一周:",yizhou)
this.setData({
yizhou:yizhou
})
},
//生命周期函数--监听页面显示!!!!!!!!!!!!!!
onShow: function () {
this.checkred()
//这是发帖成功,跳转刷新
var shuaxin=app.shuaxin
console.log("onShow的shuaxin为:",shuaxin);
if(shuaxin){
this.shuaxin()
app.shuaxin=false
}
console.log('刷新成功:'+app.userInfo._id)
//这是检测是否登录,开启监听
if(app.userInfo._id!=""){
//登录状态
console.log('进入监听事件')
if(!this.data.jianting){
//开启监听
this.jianting()
this.setData({
jianting:true
})
}
}
//点赞页面返回更新点赞评论浏览收藏状态
var index=this.data.index
var ss_xx=this.data.ss_xx
console.log("此时的data.ss_xx",this.data.ss_xx);
//console.log("index::::",index)
if(index>=0){
ss_xx[index].ss_xx.look=app.ssinfo.looknb
var loveinfo=app.loveinfo
var starinfo=app.starinfo
//console.log("app.loveinfo:",loveinfo)
if(loveinfo=='true'){
console.log("返回点赞:",index)
ss_xx[index].love=true
app.loveinfo=""
}else if(loveinfo=='false'){
console.log("返回取消点赞:",index)
ss_xx[index].love=false
app.loveinfo=""
}
if(starinfo=='true'){
console.log("返回收藏:",index)
ss_xx[index].star=true
app.starinfo=""
}else if(starinfo=='false'){
console.log("返回取消收藏:",index)
ss_xx[index].star=false
app.starinfo=""
}
ss_xx[index].ss_xx.huifunb=app.ssinfo.plnb
ss_xx[index].ss_xx.dianzannb=app.ssinfo.lovenb
ss_xx[index].ss_xx.shoucangnb=app.ssinfo.starnb
// ss_xx[index].ss_xx.shoucangnb=app.ssinfo.starnb
this.setData({
ss_xx:ss_xx,
index:-1
})
}
}m
//加载数据(刷新状态下,data内ss_xx数组重新赋值)!!!!!!!!!!!!!!
jiazai(shuaxin){
var zuixinorzuire=this.data.zuixinorzuire
// shuaxin为传给jiazai的参数
console.log("shuaxin:",shuaxin)
// shuaxin2为data中的值
var shuaxin2=this.data.shuaxin
// 如果shuaxin2中有值,则赋给shuaxin,否则shuaxin还是原来的值
shuaxin=shuaxin2==""?shuaxin:shuaxin2
console.log("shuaxin2:",shuaxin2)
if(shuaxin==true){
var head=0
console.log("toushi0")
}else{
var head=this.data.ss_xx.length
console.log("toushih",head)
}
/////////////////////
if(zuixinorzuire==0){
//按照时间排取消时间限制,
zuixinorzuire="time"
var yizhou=0
}else{
//按照热度排行
zuixinorzuire="ss_xx.dianzannb"
var yizhou=this.data.yizhou
}
/////////////////
//这下面是加载搜索值
if(shuaxin2!=""){
var text=this.data.shuaxin
console.log("text=this.data.shuaxin:",text);
db.collection('ss').where({
// name: _name,
"ss_xx.nr":{
$regex:'.*'+ text,
$options: 'i'
},
'ss_xx.jubao.1':db.command.lte(9),
time:db.command.gt(yizhou)
}).orderBy(zuixinorzuire, 'desc').skip(head).get().then(async(res)=>{
var ss_xx=this.data.ss_xx
var xx=await this.read(res.data)
ss_xx.push.apply(ss_xx,xx)
this.setData({
ss_xx:ss_xx,
kong:true
})
//console.log("打印了")
//wx.hideLoading({})
return
})
return
}
// skip跳过指定数量的数据
console.log("此时的zuiinorzuire是什么:",zuixinorzuire);
db.collection('ss').where({
'ss_xx.jubao.1':db.command.lte(9),
time:db.command.gt(yizhou)
}).orderBy(zuixinorzuire, 'desc')
.skip(head).get().then(async(res)=>{
console.log('这里已经取到了相应的数组',res.data)//这里已经取到了相应的数组
if(res.data==""){
this.setData({
kong:true
})
// 阻止下拉刷新
wx.stopPullDownRefresh({})
//wx.hideLoading({})
wx.showToast({
title: '没有更多了',
icon: 'none',
duration: 800
})
return
}else if(shuaxin==true){
//真刷新状态
//var ss_xx=res.data
//var ss_xx=await this.read(res.data)
var ss_xx=await this.love(res.data)
var ss_xx=await this.star(res.data)
}else{
//加载并加入
var ss_xx=this.data.ss_xx
//var xx=await this.read(res.data)
var xx=await this.love(res.data)
var xx=await this.star(xx)
// push.apply(),后一个数组的值push进前一个数组中
ss_xx.push.apply(ss_xx,xx)
console.log("此时push.apply之后的ss_xx:",ss_xx);
}
console.log("跳出来看此时push.apply之后的ss_xx:",ss_xx);
//写进本地
this.setData({
ss_xx:ss_xx,
kong:true
})
if(shuaxin==true){
//this.goTop()
//wx.hideLoading({})
wx.stopPullDownRefresh({})
wx.showToast({
title: '刷新成功',
icon: 'none',
duration: 800
})
}else{
//wx.hideLoading({})
}
})
},
//处理点赞数据
async love(e){
//console.log(e)
var l=e.length
for(var i=0;i<l;i++){
var yn=e[i].ss_xx.dianzanid.indexOf(app.userInfo._id)
//console.log(yn)
if(yn==-1){
e[i].love=false
}else{
e[i].love=true
}
}
return e
},
//点赞帖子(这里得加index)
dianzan(e){
// _id为要点赞的用户的id,id为被点赞的文章的id
var _id=app.userInfo._id
var id=e.currentTarget.dataset.id
var index=e.currentTarget.dataset.index
console.log("_id:",_id);
console.log(e.currentTarget.dataset)
if(_id==""){
wx.showModal({
title: '提示',
content: '登录后才可进行此操作!是否进行授权登录?',
showCancel:true,
confirmText:'是',
confirmColor:'#000000',
cancelText:'否',
cancelColor:'#FF4D49',
success (res) {
if (res.confirm) {
console.log('用户点击确定')
wx.switchTab({url:"../my/wd/wd"})
return
} else if (res.cancel) {
console.log('用户点击取消')
return
}
}
})
return
}
wx.cloud.callFunction({
name:"dianzan",
data:{
id:id,
dzrid:_id
}
})
// index表示显示的说说中的index,第一条为0
var ss_xx=this.data.ss_xx
if(this.data.ss_xx[index].love){
ss_xx[index].love=false
ss_xx[index].ss_xx.dianzannb--
}else{
ss_xx[index].love=true
ss_xx[index].ss_xx.dianzannb++
}
this.setData({
ss_xx:ss_xx
})
},
//消息监听
jianting(){
console.log("已经登录,开启监听user")
var _id=app.userInfo._id
var that=this
this.watcher = db.collection('user').doc(_id).watch({
onChange: function(e) {
console.log('监听user数据变化:', e.docs[0])
app.userInfo=e.docs[0]
var message=e.docs[0].message//message数组
app.message=message
that.jiantingchuli(message)
},
onError: function(err) {
console.error('监听出现问题!', err)
}
})
},
/*
下面存放监听变化代码,进行红点更新
*/
jiantingchuli(e){
//console.log("监听处理:",e)
// 1.未读的数一直是数组成员数,0消息则移除红点
var weidu=e.length//未读消息总数
//console.log("监听处理1:")
if(weidu!=0){
//有未读,设置红点得看页面层级
// getCurrentPages()获取当前页面栈
var ceng=getCurrentPages()
console.log("ceng的getCurrentPages:",ceng);
if(ceng.length==1){
//只有tabar页面才可以设置红点
wx.setTabBarBadge({
index: 2,
text: weidu.toString()
})
}
//console.log("监听处理3:有消息清空红点")
//2.新的消息震动提醒
var message=this.data.message//本地已收到message数组、每条新的消息都纪录进去
console.log("message:",message);
console.log("e[0].id",e[0].id);
//var newmessage=0
for(var i=0;i<weidu;i++){
var id=e[i].id
var yn=JSON.stringify(message).includes(id)
if(!yn){
//说明是新的消息,给他震动提醒
//newmessage++
message.push(e[i])
this.setData({
message:message
})
//震动
wx.vibrateLong({
type:'heavy'
})
//console.log("监听处理3:新消息震动")
}
}
}else{
//console.log("监听处理3:无消息清空红点")
var ceng=getCurrentPages()
if(ceng.length==1){
//仅可在tabar页面设置红点
wx.removeTabBarBadge({index: 2})
}
}
},
//处理搜索
async read(e){
return e;
},
//处理点赞数据
async love(e){
//console.log(e)
var l=e.length
for(var i=0;i<l;i++){
var yn=e[i].ss_xx.dianzanid.indexOf(app.userInfo._id)
//console.log(yn)
if(yn==-1){
e[i].love=false
}else{
e[i].love=true
}
}
return e
},
//处理收藏数据
async star(e){
//console.log(e)
var l=e.length
for(var i=0;i<l;i++){
var yn=e[i].ss_xx.shoucangid.indexOf(app.userInfo._id)
//console.log(yn)
if(yn==-1){
e[i].star=false
}else{
e[i].star=true
}
}
return e
},
})
ss_xx:ss_xx
})
导致打印的数据被修改。
目前你可以在plate4 onLoad打印的时候直接打印options.ss_xx
console.log(JSON.stringify(data)) 这么打印