小程序
小游戏
企业微信
微信支付
扫描小程序码分享
临时解决方案在评论中。 wx.createSelectorQuery(),在这个基础库的onLoad中调用,会导致is not funtion。这个问题在2.14.0版本是没有问题的。
1 个回答
加粗
标红
插入代码
插入链接
插入图片
上传视频
经过错误排查,发现是因为从组件的class上获取数据会报错
比如:
<view class="page"> <nav-bar class="navbar"></nav-bar> </view> const query = uni.createSelectorQuery().in(this); query.select('.navbar').fields({node: true,size: true}).exec(res => {}) // 这样真机会报错,如上图。开发工具不会。 query.select('.page').fields({node: true,size: true}).exec(res => {}) // 真机无异常。
你好,麻烦通过点击下方“反馈信息”按钮,提供出现问题的。
<view class="navbar">
<nav-bar></nav-bar>
</view>
// 因为我对createSelectorQuery的使用来源于antV的F2小程序版,使用了内部的方法
// 如下:
const query = uni.createSelectorQuery().in(this);
query.select('.navbar').fields({node: true,size: true}).exec(res => {})
// 后来我同事说按照uniapp官网,应该这样写
query.select('.navbar').fields({node: true,size: true}, res => {}).exec()
// 这样写确实解决了问题。随后我同事又从uviewui的源码中匹配 createSelectorQuery
// 找到了大佬的写法,如下
function getElRect(that, elClass, callback) {
new Promise((resolve, reject) => {
const query = uni.createSelectorQuery().in(that);
query.select('.' + elClass).fields({
size: true
}, res => {
// 如果节点尚未生成,res值为null,循环调用执行
if (!res) {
setTimeout(() => {
this.getElRect(elClass);
}, 10);
return;
}
callback(res)
resolve();
}).exec();
})
// 为了在自定义的this.$utils中使用,为了节省代码,所以引入了that。
// 最后终于解决了问题。
关注后,可在微信内接收相应的重要提醒。
请使用微信扫描二维码关注 “微信开放社区” 公众号
经过错误排查,发现是因为从组件的class上获取数据会报错
比如:
<view class="page"> <nav-bar class="navbar"></nav-bar> </view> const query = uni.createSelectorQuery().in(this); query.select('.navbar').fields({node: true,size: true}).exec(res => {}) // 这样真机会报错,如上图。开发工具不会。 query.select('.page').fields({node: true,size: true}).exec(res => {}) // 真机无异常。
<view class="navbar">
<nav-bar></nav-bar>
</view>
// 因为我对createSelectorQuery的使用来源于antV的F2小程序版,使用了内部的方法
// 如下:
const query = uni.createSelectorQuery().in(this);
query.select('.navbar').fields({node: true,size: true}).exec(res => {})
// 后来我同事说按照uniapp官网,应该这样写
const query = uni.createSelectorQuery().in(this);
query.select('.navbar').fields({node: true,size: true}, res => {}).exec()
// 这样写确实解决了问题。随后我同事又从uviewui的源码中匹配 createSelectorQuery
// 找到了大佬的写法,如下
function getElRect(that, elClass, callback) {
new Promise((resolve, reject) => {
const query = uni.createSelectorQuery().in(that);
query.select('.' + elClass).fields({
size: true
}, res => {
// 如果节点尚未生成,res值为null,循环调用执行
if (!res) {
setTimeout(() => {
this.getElRect(elClass);
}, 10);
return;
}
callback(res)
resolve();
}).exec();
})
}
// 为了在自定义的this.$utils中使用,为了节省代码,所以引入了that。
// 最后终于解决了问题。