學習小程序中,編輯頁需要獲取表單控件數據,獲取方式有兩種:
1.表單中的控件
2.非表單中的控件
項目中,需要修改完畢后,自動給 this.setData 賦值。每個頁面中每個控件都些個單獨的 handler 非常麻煩,代碼維護難。
我就想想是否可以整理成一個公共方法,涉及到幾個點:
1.如何動態取 this.data 中的值
2.如何動態設置 this.data 中的值
3.單選組和多選組的數據項如何動態讀取、設置,怎么設置選中等
下面我整理了一些非表單中控件代碼示例,大家看看
1.input
wxml 中
<input id="entity.FullName" bindinput="handleInputChange" value="{{entity.FullName}}" placeholder="請輸入姓名" />
js 中
// input輸入框的值 handleInputChange(event) { const inputVal = event.detail.value; const inputId = event.target.id; this.setData({ [`${inputId}`]: inputVal }); }
event.target.id 獲取的是 input 的 id
event.target.value 獲取的是 input 的值
this.setData({
[`${inputId}`]:inputVal
}); 動態設置 this.data.entity.FullName 屬性。
注意:inputId 取得是<input id="entity.FullName" 的 “entity.FullName”
Page({ data: { entity:{ FullName:'張三' } } });
2.radio
<view class="line"> <view class="title">性別:</view> <view class="input"> <radio-group id="entity.Gender" data-itemname="genderItems" wx:for="{{genderItems}}" wx:key="value" bindchange="handleRadio"> <label><radio value="{{item.value}}" checked="{{item.checked}}" style='zoom:.6;'/>{{item.name}}</label> </radio-group> </view> </view>
// 觸發readio handleRadio(event) { console.log(event); const inputVal = event.detail.value; const inputId = event.target.id; this.setData({ [`${inputId}`]: inputVal, }); var itemname = event.currentTarget.dataset["itemname"]; var valuename = event.currentTarget.dataset["valuename"]; if(itemname == null || itemname=="") { return; } var items = this.data[`${ itemname }`]; if(items!=null && items.length>0) { if(valuename == null || valuename =="") { //設置下默認 value 的名稱 valuename = "value"; } for (let i = 0, len = items.length; i < len; ++i) { items[i].checked = items[i][`${valuename}`] === inputVal; } this.setData({ [`${itemname}`]: items }); } }
注意:
<radio-group id="entity.Gender" data-itemname="genderItems" 中的 “genderItems” 是 this.data.genderItems 下拉項內容
data: {
paras:{},
genderItems:[
{value: 'M', name: '男' ,checked:false},
{value: 'F', name: '女' ,checked:false}
]
}
3.Switch
<switch id="entity.Active" bindchange="handleSwitch" checked="{{entity.Active}}" style='zoom:.6;' />
// switch中的值 handleSwitch(event) { const inputVal = event.detail.value; const inputId = event.target.id; this.setData({ [`${inputId}`]: inputVal, }); }
4.Silder
<slider id="entity.Per" bindchange="handleSlideChange" value="100" min="50" max="200" show-value/>
const inputVal = event.detail.value; const inputId = event.target.id; this.setData({ [`${inputId}`]: inputVal, });