小程序--爬坑

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" />

<template is="wxParse" data="{{wxParseData:article.nodes}}" />

 

 

原文地址:https://www.cnblogs.com/angel648/p/11364424.html