微信小程序开发,用setData()赋值变量数组,失败!无报错 就是复制不上
无报错,想要赋值的数组 数据不改变。
<view style="padding: 100rpx 0 30rpx 0;">
<text class="title">选择你要推广的平台text>
view>
<view class="mast">
<view wx:for="{{menu_info}}" class="{{item.class}}" bindtap="onXzPt" data-index="{{item.id}}">
{{item.name}}
view>
view>
data: {
menu_info:[
{id:0,name: "抖音",class: "item",select: 1},
{id:1,name: "快手",class: "item_f",select: 0},
{id:2,name: "视频号",class: "item_f",select: 0},
{id:3,name: "美团",class: "item_f",select: 0},
{id:4,name: "小红书",class: "item_f",select: 0}
]
},
onXzPt:function (e) {
var that = this
let oncklik = e.currentTarget.dataset.index
for (var i in that.data.menu_info){
let menuid = that.data.menu_info[i].id
var newclass = "that.data.menu_info["+i+"].class"
if(menuid == oncklik){
that.setData({
[newclass] : 'item'
})
console.log(newclass)
console.log(that.data.menu_info[i].class)
}
else{
}
}
},

that.data.menu_info[3].class
pt.js? [sm]:27 item_f
所有的办法都试过了,能想的能查的都用过了,还是不行,请帮助。
Page({
data: {
menu_info: [{
id: 0,
name: "抖音",
class: "item",
select: 1
},
{
id: 1,
name: "快手",
class: "item_f",
select: 0
},
{
id: 2,
name: "视频号",
class: "item_f",
select: 0
},
{
id: 3,
name: "美团",
class: "item_f",
select: 0
},
{
id: 4,
name: "小红书",
class: "item_f",
select: 0
}
]
},
onXzPt: function (e) {
var that = this
let oncklik = e.currentTarget.dataset.index
// 获取data数据的副本
let changeMenus = {
...that.data.menu_info
}
for (var i in changeMenus) {
let menu = changeMenus[i]
let menuid = menu.id
if (menuid == oncklik) {
menu.class = 'item'
//将整个menu_info赋值
that.setData({
menu_info: changeMenus
})
console.log(that.data.menu_info[i].class)
break
} else {}
}
},
})
你要更新的是这个变量menu_info,代码修改如下:
Page({data: {
menu_info:[
{id:0,name: "抖音",class: "item",select: 1},
{id:1,name: "快手",class: "item_f",select: 0},
{id:2,name: "视频号",class: "item_f",select: 0},
{id:3,name: "美团",class: "item_f",select: 0},
{id:4,name: "小红书",class: "item_f",select: 0}
]
},
onXzPt:function (e) {
var that = this
let oncklik = e.currentTarget.dataset.index
//修改如下
let menu_info = that.data.menu_info;
for (var i in that.data.menu_info){
let menuid = that.data.menu_info[i].id
let item = menu_info[i];
if(menuid == oncklik){
item.class = 'item';
that.setData({
menu_info : menu_info
})
console.log(menu_info[i])
console.log(that.data.menu_info[i].class)
}
else{
}
}
},
})
微信小程序使用this.setData()遇到的问题及解决方案详解
https://www.jb51.net/article/260286.htm
你想给数组中的某个对象的某个属性重新赋值,可以尝试声明一个变量复制原有数组,然后对这个变量进行操作,最后再把这个变量重新赋值给原有数组。参考这样:
onXzPt: function (e) {
var that = this
let oncklik = e.currentTarget.dataset.index
let copyMenu_info = JSON.parse(JSON.stringify(that.data.menu_info));
for (var i in copyMenu_info) {
let menuid = copyMenu_info[i].id
var newclass = copyMenu_info[i].class
if (menuid == oncklik) {
copyMenu_info.class = newclass; //给原有class赋值;
copyMenu_info. [新增属性名] = newclass; //如果想新增属性,则给新增的属性赋值;
break; //结束for循环
}
}
//在此处重新赋值
this.setData({
menu_info: copyMenu_info
})
}
另外,声明数据的时候建议不要使用关键字 "class" 作为key; 还有为了性能优化,for循环中如果满足了条件,则可以终止for循环了,