首先,
wx.createSelectorQuery()
这个方法,在当前页面中获取元素,没有问题。在我自定义的组件中获取,也可以。
但现在碰到一个问题,我需要获取一个第三方组件的高度。那么就需要获取该组件内的一个元素的高度。
现在经过各种尝试都无法获取到。
后来发现wx.createSelectorQuery().in(组件),这个方法,可以放个组件进去。但是虽然没有报错,却也没有任何执行结果。
代码类似如下:
wx.createSelectorQuery().in('组件名').select('.组件内元素的class').boundingClientRect(function (res1) {
console.log("res1", res1);
}).exec();
请问大家都是用什么办法在组件外,获取指定组件部分元素的高度的呢?
====================================================
解决办法:
wx.createSelectorQuery().in(this.selectComponent('#navTabs')).select('.van-ellipsis').boundingClientRect(res1 => {
console.log("res1", res1);
}).exec();
给van-tabs加了一个id="navTabs",然后从源码中找到需要获取的class值,然后就获取到了。
在页面js中
wx.createSelectorQuery().in(this.selectComponent('#组件id'))...
===================
wxml中
<第三方组件 id="组件id"></第三方组件>
query.in(this.selectComponent('#myShow')).select('.text').boundingClientRect(function(res) {
console.log('res1', res)
})
<my-show id="myShow" />
同样的问题,我今天折腾了一天,解决思路和你的一样,早点看到这个帖子就好了!
我是需要获得 <van-field> 的高度,但是 <van-field> 本身没有高度,是子元素撑起来的,所以通过 boundingClientRect 方法 抓到的高度都是 0 。
试了网上的很多方法,都没用。
之后,我查看了vant的源码,发现 <van-field> 里面还包含了一个 <van-cell>,所以我以为是 createSelectorQuery 无法抓取 组件的子组件。
所以给 <can-field> 添加了一个 class=“tellme”,
let field = this.selectComponent('.title')
let cell = field.selectComponent(".tellme")
const query = this.createSelectorQuery().in(cell)
这样,总算抓到了高度。
但是,后来直接用
this.createSelectorQuery().in(this.selectComponent('.title')).select(".tellme").boundingClientRect()
发现也能抓到高度,懵逼了。
说了这么多,其实就是想问,你们现在有好的办法了吗?求告知
this.selectComponent('#navTabs')
这个方法具体是咋实现的?
之前网上其它方法都不行。这种方法有效。。何解。。搞的郁闷死了。
是的,完美解决问题!感谢
外面包一个view。