微信小程序獲取自定義元素的寬高、使用”事件穿透”來達到狀態同步的效果

微信小程序獲取元素寬高的方式:

// 自定義組件需要用:this.createSelectorQuery()
const query = wx.createSelectorQuery()
query.select('.my-class').boundingClientRect(res => {
	this.setData({
		itemHeight: res.height,
		itemWidth: res.width
	})
}).exec()

這裏需要注意一下:

  • 如果是自定義組件或包含自定義組件的頁面中,應該使用this.createSelectorQuery()替代!!!
  • 這個高度是以px爲單位的!!!

藉此地補充一下觸發自定義事件一個很有用的配置

this.triggerEvent('myevent', myEventDetail, myEventOption)

myEventOption
triggerEvent()的第三個配置項myEventOption中有一個composed的屬性,將該屬性設爲true(同時將事件設爲冒泡,即bubbles也爲true),此時事件即有了“穿透”的能力(穿越組件邊界),我們就可以愉快地在各層級上監聽到事件了,這對於並列的多個自定義組件需要同步更新狀態的場景特別有用。我們只要在根節點處監聽事件,做出響應,然後分發給子組件即可。

舉個例子:如下購物車頁面,組件A組件B是並列的(它們同屬於購物車頁面)。組件B的數據狀態受組件A的影響,比如是否選中商品以及增減商品數量等都會影響到組件B的統計數據;而組件A的選中狀態也受組件B的全選狀態的影響。這時,我們只要抽象出一個處理狀態變更的函數update(),然後在組件A組件B狀態發生變化時,觸發同一個自定義事件,然後再在購物車的根頁面綁定事件處理函數(監聽子組件狀態的變更),執行update(),然後再將最新的數據狀態下發到子組件渲染即可保持狀態同步。

在這裏插入圖片描述

官方文檔鏈接:

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章