index.js的页面
const app = getApp()
Page({
data: {
formData:{},
},
onLoad() {
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
})
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就变什么,不想让他变,该如何做
js两个对象直接赋值(包括小程序的setData)实际上是引用。所以一个值变了,另外一个值也跟着变了。我在你onLoad函数中改了两处,你再试试:
onLoad: function (options) { let formData = {...app.globalData.userInfo} //展开运算符 this.setData({ formData }) console.log("onLoad",app.globalData) },
我是这样做的:var new_obj = JSON.parse(JSON.stringify(obj))
我也遇到过,这是新知识,参考https://www.jianshu.com/p/f4329eb1bace