微信小程序 簡易雙向綁定

2022-04-27 14:53 更新
基礎庫 2.9.3 開始支持,低版本需做兼容處理

雙向綁定語法

在 WXML 中,普通的屬性的綁定是單向的。例如:

<input value="{{value}}" />

如果使用 ?this.setData({ value: 'leaf' })? 來更新 ?value? ,?this.data.value? 和輸入框的中顯示的值都會被更新為 leaf ;但如果用戶修改了輸入框里的值,卻不會同時改變 ?this.data.value? 。

如果需要在用戶輸入的同時改變 ?this.data.value? ,需要借助簡易雙向綁定機制。此時,可以在對應項目之前加入 ?model?: 前綴:

<input model:value="{{value}}" />

這樣,如果輸入框的值被改變了, ?this.data.value? 也會同時改變。同時, WXML 中所有綁定了 ?value? 的位置也會被一同更新, 數(shù)據(jù)監(jiān)聽器 也會被正常觸發(fā)。

用于雙向綁定的表達式有如下限制:

  1. 只能是一個單一字段的綁定,如
  2. <input model:value="值為 {{value}}" />
    <input model:value="{{ a + b }}" />
    

    都是非法的;

  3. 目前,尚不能 data 路徑,如

    <input model:value="{{ a.b }}" />
    

    這樣的表達式目前暫不支持。

在自定義組件中傳遞雙向綁定

雙向綁定同樣可以使用在自定義組件上。如下的自定義組件:

// custom-component.js
Component({
  properties: {
    myValue: String
  }
})
<!-- custom-component.wxml -->
<input model:value="{{myValue}}" />

這個自定義組件將自身的 ?myValue? 屬性雙向綁定到了組件內輸入框的 ?value? 屬性上。這樣,如果頁面這樣使用這個組件:

<custom-component model:my-value="{{pageValue}}" />

當輸入框的值變更時,自定義組件的 ?myValue? 屬性會同時變更,這樣,頁面的 ?this.data.pageValue? 也會同時變更,頁面 WXML 中所有綁定了 ?pageValue? 的位置也會被一同更新。

在自定義組件中觸發(fā)雙向綁定更新

自定義組件還可以自己觸發(fā)雙向綁定更新,做法就是:使用 setData 設置自身的屬性。例如:

// custom-component.js
Component({
  properties: {
    myValue: String
  },
  methods: {
    update: function() {
      // 更新 myValue
      this.setData({
        myValue: 'leaf'
      })
    }
  }
})

如果頁面這樣使用這個組件:

<custom-component model:my-value="{{pageValue}}" />

當組件使用 ?setData? 更新 ?myValue? 時,頁面的 ?this.data.pageValue? 也會同時變更,頁面 WXML 中所有綁定了 ?pageValue? 的位置也會被一同更新。


以上內容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號