在input中输入时候,app.globalData的值为什么会更着变化?
发布于 4 年前 作者 tzeng 6811 次浏览 来自 官方Issues
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 回复

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

onLoad: function (options) {
  let formData = {...app.globalData.userInfo} //展开运算符
  this.setData({
    formData
  })
console.log("onLoad",app.globalData)
},

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

回到顶部