微信小程序使用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-10JavaScript實(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-09Bootstrap布局組件應(yīng)用實(shí)例講解
這篇文章主要針對(duì)Bootstrap布局組件應(yīng)用進(jìn)行實(shí)例講解,感興趣的小伙伴們可以參考一下2016-02-02document節(jié)點(diǎn)對(duì)象的獲取方式示例介紹
如果要操作一個(gè)元素,首先要獲取到它,下面為大家介紹下document節(jié)點(diǎn)對(duì)象的獲取方式,感興趣的朋友不要錯(cuò)過2013-12-12bootstrap滾動(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