1 修改data里面某个对象属性的属性

1.1 data数据

data: {
  person: {
    name: "小明",
    age: 18,
    weight: 188
  },
  date: "2021-09-06",
  title: "这是一个标题"
  ...
}

 

1.2 获取person的属性,tongguodata访问

this.data.person

 

1.3 修改

1) 方法一

  获取person的数据,修改name后直接setData

let person = this.data.person
person.name = '小刚'
this.setData({person})

 

2) 方法二

  利用解构赋值,然后重写要修改的属性

this.setData({
  person: {
    ...person,
    name: '小刚'
  }  
})

 

3) 方法三(推荐)

  获取要修改的属性名的字符串形式,然后直接setData

let propertyStr = 'person.name'
this.setData({
['person.name']:'小刚'}
)

  this.setData({
   'person.name':'小刚'}
 )

 

 

2 关于给data对象的某个属性赋值一个对象的情况

2.1 示例

1) 简介

  在data中定义两个数据,settingData和defaultSettingData都是空对象

  data: {
    applyDetail:{},  
    applyDetailbase:{},
}

 

2) 在页面初始化时,就为两个数据赋值

    data.obj是个对象{name:"法外狂徒",age:25}

    
    that.setData({
      applyDetail: data.obj,
      applyDetailbase: data.obj
    })

 

3) 单独修改settingData

that.setData({
      'applyDetail.name': '张三'

  发现defaultSettingData也跟着一起改变了,并且和settingData一模一样。

  {name:"张三",age:25}

 

4) 原因

  初始化赋值时,为两个数据赋得同一个值,这里只是把对象的地址赋值给了两个属性。两个属性只是指向了同一个对象

2.2 解决(深拷贝)

  深拷贝工具类

// 对象深拷贝函数
function deepClone(initalObj) {
  var obj = {};
  obj = JSON.parse(JSON.stringify(initalObj));
  return obj;
}