欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

詳解微信小程序中數據雙向綁定如何實現

 更新時間:2023年05月30日 08:46:24   作者:會編碼的派大星  
最近在小程序的開發(fā)過程中,需要用到雙向綁定,遇到報錯才知道微信本身是不支持對象雙向綁定的,鏖戰(zhàn)一番找到解決方案,下面這篇文章主要給大家介紹了關于微信小程序中數據雙向綁定如何實現的相關資料,需要的朋友可以參考下

前言

官方文檔:微信小程序雙向綁定語法

在 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ā)一次完整的頁面渲染流程。

合理使用 setData 官方文檔

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ù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

最新評論