微信小程序獲取元素寬高的方式:
// 自定義組件需要用: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)
triggerEvent()
的第三個配置項myEventOption
中有一個composed
的屬性,將該屬性設爲true
(同時將事件設爲冒泡,即bubbles
也爲true
),此時事件即有了“穿透”的能力(穿越組件邊界),我們就可以愉快地在各層級上監聽到事件了,這對於並列的多個自定義組件需要同步更新狀態的場景特別有用。我們只要在根節點處監聽事件,做出響應,然後分發給子組件即可。
舉個例子:如下購物車頁面,組件A
和組件B
是並列的(它們同屬於購物車頁面
)。組件B
的數據狀態受組件A
的影響,比如是否選中商品以及增減商品數量等都會影響到組件B
的統計數據;而組件A
的選中狀態也受組件B
的全選狀態的影響。這時,我們只要抽象出一個處理狀態變更的函數update()
,然後在組件A
和組件B
狀態發生變化時,觸發同一個自定義事件,然後再在購物車的根頁面
綁定事件處理函數(監聽子組件狀態的變更),執行update()
,然後再將最新的數據狀態下發到子組件渲染即可保持狀態同步。
官方文檔鏈接: