小程序
小游戏
企业微信
微信支付
扫描小程序码分享
t调试基础库:2.17.0 s使用框架:taro3.0 d代码及报错如下:
报错提示:An SelectorQuery call is ignored because no proper page or component is found. Please considering using `SelectorQuery.in` to specify a proper one.
10 个回答
加粗
标红
插入代码
插入链接
插入图片
上传视频
在自定义组件或包含自定义组件的页面中,应使用 this.createSelectorQuery() 来代替wx.createSelectorQuery()。
this.createSelectorQuery()
你好,麻烦通过点击下方“反馈信息”按钮,提供出现问题的。
在Taro中,被shadow-root包裹的子组件,不能用Taro.createSelectorQuery().in(this),同样不能用Taro.createSelectorQuery().in(this.$scope),需要使用this.$scope.createSelectorQuery(),推测是Taro1.x中包含了in方法,2.x中由于小程序api的修改故移除了这个方法,小程序改用this.createSelectorQuery()获取子组件的信息,所以在Taro中,需要用this.$scope.createSelectorQuery()来获取信息。注意不要忘记在click事件中bind this,否则拿不到类组件的上下文
Taro获取节点信息需要在onReady事件中触发,即便如此,小程序模拟器中测试,也并不是每次都能获取到节点,经过测试,在Taro.nexkTick中可以正常获取。
onReady() { this.getCanvasNode("#canvas").then(res => { console.log(res); }); }, methods: { getCanvasNode(id) { return new Promise(resolve => { Taro.nextTick(() => { let query = Taro.createSelectorQuery(); query.select(id).boundingClientRect(); query.selectViewport().scrollOffset(); query.exec(res => { resolve(res); }); }); }); } }
你的是Taro3,和微信小程序的有点不一样
Taro.createSelectorQuery().select('#ceilingBar').boundingClientRect(function(rects){console.log("此处可以获取到节点")}).exec()
这个NodesRef.boundingClientRect()回调中如果没有获取到节点,可能是调用此方法的生命周期不是 onReady 或者 ready
Taro3 :
一定要在 onReady、ready 生命周期中才能调用小程序 API 获取 DOM。 不需要调用 .in(this) 方法。
https://taro-docs.jd.com/taro/docs/taroize-troubleshooting/#4-selectorquery-api-%E8%8E%B7%E5%8F%96%E4%B8%8D%E5%88%B0-dom
微信小程序:
SelectorQuery SelectorQuery.in(Component component) 将选择器的选取范围更改为自定义组件 component 内。(初始时,选择器仅选取页面范围的节点,不会选取任何自定义组件中的节点)。
https://developers.weixin.qq.com/miniprogram/dev/api/wxml/SelectorQuery.in.html
一般是由于html元素是动态渲染导致的,请确保调用wx.createSelectorQuery()时,html元素处于渲染完成状态。
Taro.createSelectorQuery().in(this.$scope)
应该是Taro.吧
我也是这个问题,蹲个明白人
你这是在组件内调用方法还是组件外部?
试了下还是提示下面这个: An SelectorQuery call is ignored because no proper page or component is found. Please considering using `SelectorQuery.in` to specify a proper one.
const query = wx.createSelectorQuery().in(this)
query.select('.ec-canvas').boundingClientRect(function(res){
console.log('res--------:', res)
}).exec()
上面代码就是没有res响应,不知道是啥坑=.=
请移步taro官方社区
关注后,可在微信内接收相应的重要提醒。
请使用微信扫描二维码关注 “微信开放社区” 公众号
在自定义组件或包含自定义组件的页面中,应使用
this.createSelectorQuery()
来代替wx.createSelectorQuery()。在Taro中,被shadow-root包裹的子组件,不能用Taro.createSelectorQuery().in(this),同样不能用Taro.createSelectorQuery().in(this.$scope),需要使用this.$scope.createSelectorQuery(),推测是Taro1.x中包含了in方法,2.x中由于小程序api的修改故移除了这个方法,小程序改用this.createSelectorQuery()获取子组件的信息,所以在Taro中,需要用this.$scope.createSelectorQuery()来获取信息。注意不要忘记在click事件中bind this,否则拿不到类组件的上下文
Taro获取节点信息需要在onReady事件中触发,即便如此,小程序模拟器中测试,也并不是每次都能获取到节点,经过测试,在Taro.nexkTick中可以正常获取。
onReady() { this.getCanvasNode("#canvas").then(res => { console.log(res); }); }, methods: { getCanvasNode(id) { return new Promise(resolve => { Taro.nextTick(() => { let query = Taro.createSelectorQuery(); query.select(id).boundingClientRect(); query.selectViewport().scrollOffset(); query.exec(res => { resolve(res); }); }); }); } }
你的是Taro3,和微信小程序的有点不一样
Taro.createSelectorQuery().select('#ceilingBar').boundingClientRect(function(rects){console.log("此处可以获取到节点")}).exec()
这个NodesRef.boundingClientRect()回调中如果没有获取到节点,可能是调用此方法的生命周期不是 onReady 或者 ready
Taro3 :
一定要在 onReady、ready 生命周期中才能调用小程序 API 获取 DOM。 不需要调用 .in(this) 方法。
https://taro-docs.jd.com/taro/docs/taroize-troubleshooting/#4-selectorquery-api-%E8%8E%B7%E5%8F%96%E4%B8%8D%E5%88%B0-dom
微信小程序:
https://developers.weixin.qq.com/miniprogram/dev/api/wxml/SelectorQuery.in.html
Taro.createSelectorQuery().in(this.$scope)
应该是Taro.吧
我也是这个问题,蹲个明白人
你这是在组件内调用方法还是组件外部?
试了下还是提示下面这个: An SelectorQuery call is ignored because no proper page or component is found. Please considering using `SelectorQuery.in` to specify a proper one.
const query = wx.createSelectorQuery().in(this)
query.select('.ec-canvas').boundingClientRect(function(res){
console.log('res--------:', res)
}).exec()
上面代码就是没有res响应,不知道是啥坑=.=
请移步taro官方社区