小程序--爬坑
1.使用 wx.startPullDownRefresh()下拉刷新无效:
“enablePullDownRefresh”: “true” 在 Page 中定义 onPullDownRefresh 处理函数,监听该页面用户下拉刷新事件。 需要在 config 的window选项中开启 enablePullDownRefresh。
当处理完数据刷新后,wx.stopPullDownRefresh可以停止当前页面的下拉刷新。
2.数据监听器无效:
数据监听器可以用于监听和响应任何属性和数据字段的变化,从而执行特定的操作。作用类似于vue中的watch。数据监听器从小程序基础路版本2.6.1开始支持
解决:
因为我的基础库版本是2.0.1 所有数据监听失败
在详情-本地设置-调试基础库 修改版本号就可以了
格式如下:
1 - 基本使用方法
数据监听器可以用于监听和响应任何属性和数据字段的变化,从而执行特定的操作
observers: {
'propPrice, num': function (newPropPrice, newNum) {
console.log(newPropPrice)
console.log(newNum)
}
},
2 - 监听子数据字段语法
-
案例代码
// 监控某个子数据的代码
Component({
observers: {
'some.subfield': function (subfield) {
// 使用 setData 设置 this.data.some.subfield 时触发
// (除此以外,使用 setData 设置 this.data.some 也会触发)
},
'arr[12]': function (arr12) {
// 使用 setData 设置 this.data.arr[12] 时触发
// (除此以外,使用 setData 设置 this.data.arr 也会触发)
}
}
})
// 使用通配符 ** 监听所有子数据字段的变化
Component({
observers: {
'some.field.**': function (field) {
// 使用 setData 设置 this.data.some.field 本身或其下任何子数据字段时触发
// (除此以外,使用 setData 设置 this.data.some 也会触发)
field === this.data.some.field
}
}
})
3.VM144:1 request:fail url not in domain list
可能原因:
-
域名未完成备案
-
url里有端口(可以有端口存在)
-
报错提示说请求的url不在域名列表里,应该是还没有配置服务器域名,可点击开发者工具右上角 详情-域名信息,看看是否配置了域名;
解决:详情->项目设置->不校验合法域名
4. 无法获取UnionID的问题
-
login获取UID必须满足两个条件: 1、把小程序和公众号都绑定在开放平台; 2、用户必须已经关注公众号。
-
用wx.getUserInfo获取满足一个条件:把小程序和公众号都绑定在开放平台;
5. wx.getSystemInfoSync获取windowHeight不准确
主要原因在于获取是时机,wx.getSystemInfoSync是在页面初始化的时候就计算了,基本上可以理解为是屏幕高度。所以,最好的方法是使用异步接口,并且在onReady函数中调用。
onReady() {
wx.getSystemInfo({
success({windowHeight}) {
// todo
}
});
}
6. 图片本地资源名称,尽量使用小写命名
在解决iPhone X适配时,底部多余部分使用图片时
<image class='iphonexImg' src="/imgs/iphoneBGT.png" mode="aspectFill">image>
路径是 src='imgs/iphoneBGT.png'
发现在pc IDE上面可以显示出来,但是真机调试时,图片找不到,
然后将图片名称改为iphonex.png真机调试就可以了
<image class='iphonexImg' src="/imgs/iphonex.png" mode="aspectFill">image>
封装代码:wechat.js
/**
-
Promise化小程序接口 */ class Wechat { /**
-
登陆
-
@return {Promise} */ static login() { return new Promise((resolve, reject) => wx.login({ success: resolve, fail: reject })); };
-
/**
-
获取用户信息
-
@return {Promise} */ static getUserInfo() {
return new Promise((resolve, reject) => wx.getUserInfo({ success: resolve, fail: reject }));
};
};
module.exports = Wechat; 调用代码:
let wechat = require('./wechat.js'); wechat.login() .then(d => { console.log("登陆", d); return wechat.getUserInfo(); }) .then(d => { console.log("获取用户信息", d); }) .catch(e => { console.log(e); }) 结果
如果需要传递参数,比如设置本地数据缓存接口:
static setStorage(key, value) { return new Promise((resolve, reject) => wx.setStorage({ key: key, data: value, success: resolve, fail: reject }));
7.原生:微信小程序使用POST方法请求的问题
解决方案:wx.request()使用post方法请求时,还需要加上header,header[content-type]值为application/x-www-form-urlencoded,否则请求返回失败。
8.wepy框架:小程序发布之后,需要点两次才会更新
比如项目中:轮播图,登录功能wx.login()获取code值,搜索功能等等
解决方案:异步操作需添加:this.$apply()
9.比较旧的项目迁移到小程序,获取到富文本。微信小程序解析不了
比如项目中:商品详情页面
解决方案:引入插件wxParse.js ,js文件中 require引入,
var WxParse = require('../wxParse/wxParse.js') 组件中添加
<import src="../wxParse/wxParse.wxml" />