收藏
回答

在input中输入时候,app.globalData的值为什么会更着变化?

index.js的页面
const app = getApp()

Page({
  data: {
    formData:{},
  },
  onLoad() {
    //var formData=this.data.formData
    
      this.setData({
        formData:app.globalData.userInfo
      })
    console.log(app.globalData)
  },
  //获取数据
  bindInput:function(e){
    const formData=this.data.formData
    formData[e.currentTarget.dataset.type]=e.detail.value
    this.setData({
      formData
    })
    //为什么没有对app.globalData的值进行设置,值却变了
    console.log(app.globalData)
  }
})

index.wxml页面
<form>
  <view class="cu-form-group margin-top">
    <view class="title"><text class="text-red">*</text>姓名</view>
    <input placeholder="请输入真实姓名" bindinput="bindInput" maxlength="4" data-type="name" value="{{formData.name}}"></input>
  </view>
</form>

app.js页面
App({
  onLaunch() {
    this.globalData = {
      userInfo: {name:''}
    }
  }
})



现在问题是,在input中输入时候,还没有点保存按钮,之类,app.globalData.userInfo.name的值就变好了,input中输入什么app.globalData.userInfo.name就变什么,不想让他变,该如何做


回答关注问题邀请回答
收藏

2 个回答

  • 当乙醇爱上了铜
    当乙醇爱上了铜
    2021-05-14

    js两个对象直接赋值(包括小程序的setData)实际上是引用。所以一个值变了,另外一个值也跟着变了。我在你onLoad函数中改了两处,你再试试:

    onLoad: function (options) {
      let formData = {...app.globalData.userInfo} //展开运算符
      this.setData({
        formData
      })
    console.log("onLoad",app.globalData)
    },
    
    2021-05-14
    有用 2
    回复 2
    • 安逸
      安逸
      2021-05-14
      不建议这么操作,如果对象存在重复的会被合并。
      我是这样做的:var new_obj = JSON.parse(JSON.stringify(obj))
      2021-05-14
      回复
    • bezal
      bezal
      2021-05-14
      感谢答复
      2021-05-14
      回复
  • 安逸
    安逸
    2021-05-14

    我也遇到过,这是新知识,参考https://www.jianshu.com/p/f4329eb1bace

    2021-05-14
    有用
    回复
登录 后发表内容