詳解微信小程序中數據雙向綁定如何實現
前言
官方文檔:微信小程序雙向綁定語法
在 WXML 中,普通的屬性的綁定是單向的。例如:
<input value="{<!--{C}%3C!%2D%2D%20%2D%2D%3E-->{value}}" />如果使用 this.setData({ value: ‘leaf’ }) 來更新 value ,this.data.value 和輸入框的中顯示的值都會被更新為 leaf ;但如果用戶修改了輸入框里的值,卻不會同時改變 this.data.value 。
如果需要在用戶輸入的同時改變 this.data.value ,需要借助簡易雙向綁定機制。此時,可以在對應項目之前加入 model: 前綴:
<input model:value="{<!--{C}%3C!%2D%2D%20%2D%2D%3E-->{value}}" />這樣,如果輸入框的值被改變了, this.data.value 也會同時改變。同時, WXML 中所有綁定了 value 的位置也會被一同更新, 數據監(jiān)聽器 也會被正常觸發(fā)。
一、通過 input 的 bindinput 事件實現
這里建議吧 bindinput 換成 bindblur 在輸入框失去光標時再去賦值。
官方解釋:setData 都會觸發(fā)邏輯層虛擬 DOM 樹的遍歷和更新,也可能會導致觸發(fā)一次完整的頁面渲染流程。
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="請輸入昵稱" />
</view>
</view>
<view class="form-item">
<view class="form-label">簡介</view>
<view class="form-input">
<input type="text" value="{{ form.introduce }}" data-prop="form.introduce" bindinput="BindInput" placeholder="請輸入簡介" />
</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
})
}
})輸出結果

二、通過 model:value 實現
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="請輸入昵稱" />
</view>
</view>
<view class="form-item">
<view class="form-label">簡介</view>
<view class="form-input">
<input name="introduce" type="text" model:value="{{ form.introduce }}" placeholder="請輸入簡介" />
</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);
},
})輸出結果

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;
}總結
到此這篇關于微信小程序中數據雙向綁定如何實現的文章就介紹到這了,更多相關微信小程序數據雙向綁定內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
由淺入深講解Javascript繼承機制與simple-inheritance源碼分析
Javascript語言對繼承實現的并不好,需要工程師自己去實現一套完整的繼承機制。下面我們由淺入深的系統掌握使用javascript繼承的技巧,對javascript繼承相關知識感興趣的朋友一起看看吧2015-12-12
javascript提取URL的搜索字符串中的參數(自定義函數實現)
我們經常會看到有的頁面鏈接地址后面會跟有參數,很多時候我們需要獲得這些參數的值,接下來將介紹獲取方法,感興趣的朋友可以了解系,希望本文對你有所幫助2013-01-01
javascript 實現 秒殺,團購 倒計時展示的記錄 分享
這篇文章介紹了javascript 實現 秒殺,團購 倒計時展示的記錄方法,有需要的朋友可以參考一下2013-07-07
詳解cesium實現大批量POI點位聚合渲染優(yōu)化方案
這篇文章主要為大家介紹了cesium實現大批量POI點位聚合渲染優(yōu)化方案詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-05-05

