微信小程序使用this.setData()遇到的問題及解決方案詳解
前言
最近在學(xué)習(xí)小程序時(shí)遇到了關(guān)于setData()的不少問題,在這里做一些總結(jié)和記錄。
使用方法總結(jié)
在更改setData下的變量時(shí),直接寫key名就可以了的,不用寫this.data.屬性,如下所示
Page({
data:{
value:'hello'
}
this.setData({
value:'修改的值'
//錯(cuò)誤寫法:this.data.value:''
//注意key的名稱一定是data中的名稱
})
})setData的第二個(gè)參數(shù)是一個(gè)回調(diào)函數(shù),在頁面渲染完后執(zhí)行。
this.setData({
value:'hello'
}, () => { //第二個(gè)參數(shù)
console.log("在頁面渲染完value后再執(zhí)行");
})
?利用setData()修改數(shù)組對(duì)象下的一個(gè)屬性
方法一:使用雙引號(hào)或單引號(hào)
Page({
data:{
List: [{
id:0,
name:'test01'
}]
}
})
this.setData({
"List.id": 6
})方法二:使用中擴(kuò)號(hào)
this.setData({
['List.id']: 2
})如果數(shù)組下有多個(gè)對(duì)象,我們要如何修改其中的一個(gè)屬性呢?
wxml部分代碼:
//wxml
<block wx:for="{{List}}" wx:key="index" id="{{index}}">
<view class="message">
<view>{{item.id}}、</view>
<view>{{item.name}}</view>
</view>
?
<button bindtap="change" id="{{item.id}}">點(diǎn)我修改數(shù)據(jù)中的name</button>
</block>錯(cuò)誤寫法:
//index.js
Page({
data:{
List:
[{
id:0,
name:'test01'
},
{
id:1,
name:'test02'
}],
},
change(event){
let index = event.currentTarget.id;
this.setData({
List[index].name:'newName'
})
}
})這樣寫會(huì)報(bào)錯(cuò):
Only digits(0-9) can be put inside [] in the path string
正確寫法:
change(event){
let index = event.currentTarget.id;
this.setData({
[`List[${index}].name`]:'newName'
})
}簡易雙向綁定
如果需要在用戶輸入時(shí)改變this.data.value,需要借助簡易雙向綁定機(jī)制
在對(duì)應(yīng)項(xiàng)目前加入model: 前綴即可
使用時(shí)控制臺(tái)會(huì)有警告:Do not have handler in component
原因是沒有綁定對(duì)應(yīng)的事件,在不影響結(jié)果的情況下可以無視報(bào)錯(cuò)或者加一個(gè)空函數(shù)
或者使用setData()自己觸發(fā)綁定更新
<input type="text" model:value="{{value1}}" bindinput="valueChange"/>
<input type="text" value="{{value2}}" bindinput="inputChange"/> data:{
value1:'',
value2:''
}
//綁定model:并不出現(xiàn)警告的方法
valueChange(){
console.log(this.data.value);
}
//利用setData()更新
inputChange(e){
let changeValue= e.detail.value;
this.setData({
value:changeValue
})
console.log(this.data.value);
},在自定義組件中也能使用雙向綁定
注意點(diǎn):用于雙向綁定的表達(dá)式有如下限制:
1、只能是一個(gè)單一字段的綁定,如下都是非法的;
<input model:value="值為 {{value}}" />
<input model:value="{{ a + b }}" />2、目前,尚不能支持data路徑的表達(dá)式,如
<input model:value="{{ a.b }}" />參考了一些帖子和官方文檔,如有錯(cuò)誤或更好的方案,歡迎指出和交流!
總結(jié)
到此這篇關(guān)于微信小程序使用this.setData()遇到的問題及解決方案的文章就介紹到這了,更多相關(guān)小程序使用this.setData()問題解決內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
p5.js實(shí)現(xiàn)動(dòng)態(tài)圖形臨摹
這篇文章主要為大家詳細(xì)介紹了p5.js實(shí)現(xiàn)動(dòng)態(tài)圖形臨摹,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-10-10
JavaScript實(shí)現(xiàn)數(shù)組去重的十種方法分享
去重是開發(fā)中經(jīng)常會(huì)碰到的一個(gè)熱點(diǎn)問題,這篇文章主要介紹了JavaScript中實(shí)現(xiàn)數(shù)組去重的10種方法,文中的示例代碼講解詳細(xì),感興趣的可以了解一下2022-11-11
將Datatable轉(zhuǎn)化成json發(fā)送前臺(tái)實(shí)現(xiàn)思路
將Datatable轉(zhuǎn)化成json可以將dt序列化成json,放到前臺(tái)的隱藏控件hidBoundary中,具體的實(shí)現(xiàn)如下,有類似需求的朋有可以參考下2013-09-09
Bootstrap布局組件應(yīng)用實(shí)例講解
這篇文章主要針對(duì)Bootstrap布局組件應(yīng)用進(jìn)行實(shí)例講解,感興趣的小伙伴們可以參考一下2016-02-02
document節(jié)點(diǎn)對(duì)象的獲取方式示例介紹
如果要操作一個(gè)元素,首先要獲取到它,下面為大家介紹下document節(jié)點(diǎn)對(duì)象的獲取方式,感興趣的朋友不要錯(cuò)過2013-12-12
bootstrap滾動(dòng)監(jiān)控器使用方法解析
這篇文章主要為大家詳細(xì)解析了bootstrap滾動(dòng)監(jiān)控器使用方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-01-01
利用ajaxfileupload插件實(shí)現(xiàn)文件上傳無刷新的具體方法
利用ajaxfileupload插件實(shí)現(xiàn)文件上傳無刷新的具體方法,需要的朋友可以參考一下2013-06-06

