詳解微信小程序中數(shù)據(jù)雙向綁定如何實(shí)現(xiàn)
前言
官方文檔:微信小程序雙向綁定語(yǔ)法
在 WXML 中,普通的屬性的綁定是單向的。例如:
<input value="{<!--{C}%3C!%2D%2D%20%2D%2D%3E-->{value}}" />
如果使用 this.setData({ value: ‘leaf’ }) 來(lái)更新 value ,this.data.value 和輸入框的中顯示的值都會(huì)被更新為 leaf ;但如果用戶修改了輸入框里的值,卻不會(huì)同時(shí)改變 this.data.value 。
如果需要在用戶輸入的同時(shí)改變 this.data.value ,需要借助簡(jiǎn)易雙向綁定機(jī)制。此時(shí),可以在對(duì)應(yīng)項(xiàng)目之前加入 model: 前綴:
<input model:value="{<!--{C}%3C!%2D%2D%20%2D%2D%3E-->{value}}" />
這樣,如果輸入框的值被改變了, this.data.value 也會(huì)同時(shí)改變。同時(shí), WXML 中所有綁定了 value 的位置也會(huì)被一同更新, 數(shù)據(jù)監(jiān)聽(tīng)器 也會(huì)被正常觸發(fā)。
一、通過(guò) input 的 bindinput 事件實(shí)現(xiàn)
這里建議吧 bindinput 換成 bindblur 在輸入框失去光標(biāo)時(shí)再去賦值。
官方解釋:setData 都會(huì)觸發(fā)邏輯層虛擬 DOM 樹(shù)的遍歷和更新,也可能會(huì)導(dǎo)致觸發(fā)一次完整的頁(yè)面渲染流程。
WXML 代碼
<view class="my-page"> <form catchsubmit="formSubmit"> <view class="form-item"> <view class="form-label">昵稱</view> <view class="form-input"> <input type="text" value="{{ form.nickName }}" data-prop="form.nickName" bindinput="BindInput" placeholder="請(qǐng)輸入昵稱" /> </view> </view> <view class="form-item"> <view class="form-label">簡(jiǎn)介</view> <view class="form-input"> <input type="text" value="{{ form.introduce }}" data-prop="form.introduce" bindinput="BindInput" placeholder="請(qǐng)輸入簡(jiǎn)介" /> </view> </view> <view class="btn-area"> <button style="margin: 30rpx auto" type="primary" formType="submit">Submit</button> </view> </form> </view>
TS 代碼
Page({ data: { form: { nickName: '' } }, onLoad() { }, onReady() { }, formSubmit() { console.log(this.data.form) }, BindInput(e: any) { this.setData({ [`${e.currentTarget.dataset.prop}`]: e.detail.value }) } })
輸出結(jié)果
二、通過(guò) model:value 實(shí)現(xiàn)
WXML 代碼
<view class="my-page"> <form catchsubmit="formSubmit"> <view class="form-item"> <view class="form-label">昵稱</view> <view class="form-input"> <input name="nickName" type="text" model:value="{{ form.nickName }}" placeholder="請(qǐng)輸入昵稱" /> </view> </view> <view class="form-item"> <view class="form-label">簡(jiǎn)介</view> <view class="form-input"> <input name="introduce" type="text" model:value="{{ form.introduce }}" placeholder="請(qǐng)輸入簡(jiǎn)介" /> </view> </view> <view class="btn-area"> <button style="margin: 30rpx auto" type="primary" formType="submit">Submit</button> </view> </form> </view>
TS 代碼
Page({ data: { form: { nickName: '', introduce: '', }, }, onLoad() { }, onReady() { }, formSubmit(e: any) { this.setData({ form: e.detail.value }) console.log(this.data.form); }, })
輸出結(jié)果
WXSS 代碼
.my-page { padding: 30rpx; } .form-item { display: flex; align-items: center; height: 80rpx; line-height: 80rpx; border-bottom: 1rpx solid #eee; } .form-item .form-label { height: 100%; width: 180rpx; text-align: center; } .form-item .form-input { width: calc(100% - 180rpx); } .form-item .form-input input { width: 100%; height: 80rpx; }
總結(jié)
到此這篇關(guān)于微信小程序中數(shù)據(jù)雙向綁定如何實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)微信小程序數(shù)據(jù)雙向綁定內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
由淺入深講解Javascript繼承機(jī)制與simple-inheritance源碼分析
Javascript語(yǔ)言對(duì)繼承實(shí)現(xiàn)的并不好,需要工程師自己去實(shí)現(xiàn)一套完整的繼承機(jī)制。下面我們由淺入深的系統(tǒng)掌握使用javascript繼承的技巧,對(duì)javascript繼承相關(guān)知識(shí)感興趣的朋友一起看看吧2015-12-12javascript提取URL的搜索字符串中的參數(shù)(自定義函數(shù)實(shí)現(xiàn))
我們經(jīng)常會(huì)看到有的頁(yè)面鏈接地址后面會(huì)跟有參數(shù),很多時(shí)候我們需要獲得這些參數(shù)的值,接下來(lái)將介紹獲取方法,感興趣的朋友可以了解系,希望本文對(duì)你有所幫助2013-01-01javascript 實(shí)現(xiàn) 秒殺,團(tuán)購(gòu) 倒計(jì)時(shí)展示的記錄 分享
這篇文章介紹了javascript 實(shí)現(xiàn) 秒殺,團(tuán)購(gòu) 倒計(jì)時(shí)展示的記錄方法,有需要的朋友可以參考一下2013-07-07詳解cesium實(shí)現(xiàn)大批量POI點(diǎn)位聚合渲染優(yōu)化方案
這篇文章主要為大家介紹了cesium實(shí)現(xiàn)大批量POI點(diǎn)位聚合渲染優(yōu)化方案詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-05-05javascript實(shí)現(xiàn)將文件保存到本地方法匯總
本文給大家匯總介紹了3中使用javascript實(shí)現(xiàn)將文件保存到本地的方法,非常的簡(jiǎn)單實(shí)用,有需要的小伙伴可以參考下。2015-07-07