收藏
回答

开发工具刚打开时,调用wx.createSelectorQuery()出错

框架类型 问题类型 API/组件名称 终端类型 微信版本 基础库版本
小程序 Bug wx.createSelectorQuery() 工具 6.6.7.1321 2.2.0

我是在上拉加载中调用的wx.createSelectorQuery()来获取dom位置信息,

let qid = '#ppt-' + cTab + '-' + 0 + '-' + (lasto)

let query = wx.createSelectorQuery()

query.select(qid).boundingClientRect()

query.exec(function (res) {

    console.log(res[0].bottom)

})

如果我刚打开调试工具后上拉,调用会出警告如下:

VM54:1 An SelectorQuery call is ignored because no proper page or component is found. Please considering using `SelectorQuery.in` to specify a proper one.

然后我按照提示加了wx.createSelectorQuery().in(this)也不行

重新编译一下就不会报错了,不知道是什么问题?

崩溃。。

求救c⌒っ゚Д゚)っ


回答关注问题邀请回答
收藏

3 个回答

  • 又有人离开
    又有人离开
    2018-08-20

    我也遇到这样的问题,顶一下,让官方看到。

    我的代码

    onLoad: async function (options) {
        var currentTabInDb = wx.getStorageSync(util.getCurrentPagePath() + ':currentTab')
        if (currentTabInDb && currentTabInDb <= 2) {
          this.setData({
            currentTab: currentTabInDb || this.data.currentTab
          })
        }
        this.setData({
          shopId: wx.getStorageSync('shopId')
        })
        await this.refreshData(this.data.currentTab)
        this.adjustSwiperHeight()

    },


    adjustSwiperHeight: async function () {
        var topTabsHeight = (await util.boundingClientRect('#topTabs')).height
        var viewportHeight = (await util.boundingClientRect(wx.createSelectorQuery().selectViewport())).height
        var listHeight = (await util.boundingClientRect(`#list${this.data.currentTab}`)).height
        var minHeight = Math.max(listHeight, viewportHeight - topTabsHeight)
        this.setData({
          swiperHeight: minHeight + 'px'
        })
    },
     
    util.boundingClientRect = selectorOrNodeRef => new Promise((resolve, reject) => {
      var node
      if (typeof selectorOrNodeRef == 'string'){
        node = wx.createSelectorQuery().select(selectorOrNodeRef)
      }else{
        node = selectorOrNodeRef
      }
      node.boundingClientRect(res => {
        resolve(res)
      }).exec()
    })

    也是tab这种形式,开发工具里面每次第一次打开都会出现这个错误,然后重新编译一次就好了。

    客户端有时候会出现。

    2018-08-20
    有用
    回复
  • 坚果 jeango
    坚果 jeango
    2018-08-17

    检查一下代码执行先后顺序,可能是组件初始化代码还没执行完就到你这里了

    2018-08-17
    有用
    回复 2
    • 明雨
      明雨
      2018-08-17

      有可能,然后重新编译组件加载变快了,所以没问题,嗯,,,maybe

      2018-08-17
      回复
    • 明雨
      明雨
      2018-08-17

      不对,是这样,我当时是打开,特意停了一段时间,才去上拉,触发的上拉加载,组件应该早加载完了

      2018-08-17
      回复
  • 漫步雨后
    漫步雨后
    2018-08-07

    解决了吗,最近也遇到这个问题了,再真机只出现过两次。再控制台里console.log发现,query.exec方法没执行,再编译也没问题了,搞了一天了,试了各种方法,用API取到的设备像素比有的是错误的,也没办法用。在线等额。。。官方老爷快出来...


    2018-08-07
    有用
    回复 3
    • 明雨
      明雨
      2018-08-12

      后面没有管,现在好像好了,我用了promise,但是不知道跟这个有没有关系

      2018-08-12
      回复
    • 漫步雨后
      漫步雨后
      2018-08-15回复明雨

      能否贴一下代码一览,我这边试了一下,还是不行,

      2018-08-15
      回复
    • 明雨
      明雨
      2018-08-17


      //在onReachBottom后,获取每一列的高度,并调用 get_covtocol 更新列
         getprevH: function (cTab, where) {
           let that = this
           console.log(where, 'get tab',cTab,'previous height!')
           return new Promise((resolve, reject) => {
             let collists = that.data.collist
             let colheights = that.data.colheight
             var i = 0, j = 0
             let lasto = ''
             let done = [0,0]
             //console.log(collists,colheights)
             //创建节点选择器     
             lasto = collists[cTab][0].length - 1
             colheights[cTab] = [-1, -1]
             if (lasto >= 0) {
               let qid = '#ppt-' + cTab + '-' + 0 + '-' + (lasto)
               let query = wx.createSelectorQuery().in(that);//选择id
               //console.log(qid)
               query.select(qid).boundingClientRect()
               query.exec(function (res) {
                 colheights[cTab][0] = res[0].bottom
                 that.setData({ colheight: colheights })
                 done[0] = 1
                 if (colheights[cTab][1] >= 0) resolve('done');
                 //if (res[0].bottom < 0&&done[1]==1) reject('fail');
               })
             }
             lasto = collists[cTab][1].length - 1
             if (lasto >= 0) {
               let qid = '#ppt-' + cTab + '-' + 1 + '-' + (lasto)
               let query = wx.createSelectorQuery();//选择id
               query.select(qid).boundingClientRect()
               query.exec(function (res) {
                 colheights[cTab][1] = res[0].bottom
                 that.setData({ colheight: colheights })
                 done[1] = 1
                 if (colheights[cTab][1] >= 0) resolve('done');
               })
             }
       
           });
         },

      这是我的获取组件的高度,我在onreachbottom这样调用的,其实我觉得好像没软用

      that.getprevH(currentTab, 'before more').then((value) => {
        that.get_covtocol(currentTab)
      });


      2018-08-17
      回复
登录 后发表内容