微信小程序 簡單雙向綁定

2022-04-25 11:30 更新

簡易雙向綁定

基礎(chǔ)庫 2.9.3 開始支持,低版本需做兼容處理

雙向綁定語法

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

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

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

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

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

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

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

    1.只能是一個單一字段的綁定,如

<input model:value="值為 {{value}}" />
<input model:value="{{ a + b }}" />

都是非法的;

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

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

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

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

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

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

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

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

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

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

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

// 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 的位置也會被一同更新。


以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號