微信小程序错误总结

1.全局变量的配置/使用

初始创建小程序时,你就应该会注意到项目初始化的框架中,根目录下有一个app.js配置文件(其实个人理解为 根目录下的文件 都是全局配置文件)

配置:我们只需要将全局变量,以数组的形式放到 globalData 中即可。

使用:当你需要在其他js页面中使用所配置的全局变量时:

  1. 首先,需要获取应用实例 const app = getApp()

  2. 直接对需要的变量赋值,然后正常使用即可 例如赋值给imgServer:imgServer: app.globalData.imgServer

  3. 当然,也可以在 js 中对应的点击事件中,随时赋值使用

var test_imgServer = app.globalData.imgServer;  //赋值
console.log(test_imgServer )  //使用</pre>

2.引用配置文件中的变量,除了使用const外,还有什么方法

微信小程序定义了一项工具文件utils,此文件的js旨在本文件之内有效,当其他子页面想调用其中的js方法或者变量时,需要两步骤:

  1. 在utils被调用的js文件中,面向对象的方式模型输出: module.exports={要调用的函数名称:要调用的函数名称 };

  2. 在要调用的js文件中模块化引入utils的js文件var object=require("utils被调用的js文件地址"); 可以输出一下object就能看到被调用的方法。

3.微信小程序向后台请求数据时关于method: 'POST'method: 'GET'

  • Get是用来从服务器上获得数据,而Post是用来向服务器上传递数据

  • Get是不安全的,因为在传输过程,数据被放在请求的URL中

  • 使用Post传输的数据,可以通过设置编码的方式正确转化中文;而Get传输的数据却没有变化

4.使用自定义导航栏

导航栏作为常用组件有做简单封装,当然你也可以直接复制代码结构自己修改,达到个性化目的。

  1. 在App.js中获得系统信息:
onLaunch: function() {
 wx.getSystemInfo({
 success: e => {
 this.globalData.StatusBar = e.statusBarHeight;
 let custom = wx.getMenuButtonBoundingClientRect();
 this.globalData.Custom = custom;
 this.globalData.CustomBar = custom.bottom + custom.top - e.statusBarHeight;
 }
 })
},
  1. 在App.json配置取消系统导航栏,并全局引入组件
"window": {
 "navigationStyle": "custom"
},
"usingComponents": {
 "cu-custom":"/colorui/components/cu-custom"
}
  1. 在自己的page.wxml页面可以直接调用了
<cu-custom bgColor="bg-gradual-pink" isBack="{{true}}">
 <view slot="backText">返回</view>
 <view slot="content">导航栏</view>
</cu-custom>

5.微信小程序关于页面数据传输问题

假如说是A页面数据传给B页面,我用的是URL拼接字符串的方法实现的,这里的Url是指A跳转B页面时的链接路径。 在A页面中:

let that = this
//这个this是指当前页面(page)因为page里面包含了当前页面的所有数据
wx.navigateTo({
url: '../../../pages/trade/tradeParticulars/pay/payment/payment?haha=' + JSON.stringify(that.data.courseInfo.pinList) + '&www=' + that.data.courseInfo.name 
/*这里是跳B页面的路径问号后面就是从A页面附带传输的数据不同的数据之间用加号连接,key和值之间也用加
号连接(像这样'&www=' + that.data.courseInfo.name)括号内的内容就代表传过去的一个参数,而且key
值必须用引号包起来*/
})
},

在这里我想区分一下传数组的区别 传数组时:要用以下方法: JSON.stringify(that.data.courseInfo.pinList) //把要传递的json对象转化成字符串; 当B页面接收时代码如下: (将下列代码放在onload里面)

var that = this
var haha = JSON.parse(options.haha)
//将接收到的字符串转化成json对象(这里就和后台传输的数据处理方式一样)是数组的话用这种方式接收
var www = options.www
如果不是数组的话就用普通方式接收就好啦(var www = options.www)
that.setData({
haha: haha[0].name,
//这里是你想让数组的哪些东西显示在页面
www: www
//单个的数据就直接拿来用
})

转自:https://www.cnblogs.com/houyi521/p/8026221.html 个人注:除了拼接还能采用全局变量,存到缓冲区等方法

6.ES6 新增的方法 Object.keys()

Object.keys()方法会返回一个由一个给定对象的自身可枚举属性组成的数组。如果我们的对象为空,他会返回一个空数组,

if (Object.keys(object).length === 0) {
 return false // 如果为空,返回false
}
return true // 如果不为空,则会执行到这一步,返回true

7.上传云函数时,出现以下报错:

Error: ResourceNotFound.FunctionName, FunctionName 指定的资源不存在。 (a213ca69-d274-471e-a411-d225e185a597) 解决方法:

  1. 在云开发控制-云函数中,手动新建一个同名的函数名

  2. 在微信开发者工具中在吧云函数重新上传部署下就可以了

8.openid

wechat2.png

9.微信小程序 空判断

  1. 判断undefined:
var tmp = undefined; if (typeof(tmp) == "undefined"){ 
 console.log("undefined"); 
}
  1. 判断null:
var tmp = null; if (!tmp && typeof(tmp)!="undefined" && tmp!=0){ 
 console.log("null"); 
}
  1. 判断NaN:
var tmp = 0/0; if (isNaN(tmp) ){ 
 console.log("NaN"); 
}

说明:NaN 表示非法,如果把 NaN 与任何值(包括其自身)相比得到的结果均是 false,所以要判断某个值是否是 NaN,不能使用 == 或 === 运算符。 提示:isNaN() 函数通常用于检测 parseFloat()parseInt()的结果,以判断它们表示的是否是合法的数字。当然也可以用 isNaN() 函数来检测算数错误,比如用 0 作除数的情况。

  1. 判断undefined和null:
var tmp = undefined; if (tmp== undefined) { 
 console.log("null or undefined"); }var tmp = undefined; if (tmp== null) { 
 console.log("null or undefined"); 
}
  1. 判断undefined、null与NaN:
var tmp = null; if (!tmp) { 
 console.log("null or undefined or NaN"); 
}

提示:一般不那么区分就使用这个足够。

  1. 判断空对象 让一个对象一开始设为null,通过判断是否为null即可判断。 此外,也能通过ES6 新增的方法 Object.keys()判断一个对象是否为空: Object.keys() 方法会返回一个由一个给定对象的自身可枚举属性组成的数组。 如果我们的对象为空,他会返回一个空数组,如下:
var a = {}
Object.keys(a) // 我们可以依靠Object.keys()这个方法通过判断它的长度来知道它是否为空。
if (Object.keys(object).length === 0) {
 return false // 如果为空,返回false
}
return true // 如果不为空,则会执行到这一步,返回true
  1. 判断 options 是否存在 if(options){ //存在 } else{ //不存在 }

10.错误Cannot convert undefined or null to object

错误原因:

  1. Object.keys()中传错了参数

  2. 由于undefined和null无法转成对象,所以如果它们作为Object.assign()的参数(只有一个参数),也会报错

11.在返回前一个页面时,刷新前一页面数据

若从A页面跳到B页面(A--->B),在B页面操作完成后需要刷新A页面的数据,有两种思路:(推荐使用第2种方法)

  1. 在返回A页面的时候调用A的页面onShow()方法,重新查询加载一次A页面即可,代码为:
onShow: function () {
this.onLoad();
},

这种方法返回A页面时需要重新加载页面,太慢,太Low!!

  1. 这种方法是极力推荐的: 在B页面中进行操作的时候就在后台刷新A页面,当返回A页面的时候就不需要再刷新加载A页面了: 具体步骤分为两步:

    1. 在父页面中添加刷新数据的方法:
    changeData:function(){
     this.onLoad();//最好是只写需要刷新的区域的代码,onload也可,效率低,有点low
    }
2.  在子页面中添加方法:并且在需要的地方进行调用(如success方法中setData之后调用`that.changeParentData()`)
   changeParentData: function () {
     var pages =getCurrentPages();//当前页面栈
     if (pages.length >1) {
     var beforePage = pages[pages.length- 2];//获取上一个页面实例对象
     beforePage.changeData();//触发父页面中的方法
     }
    }

12.使用页面栈 修改上一个页面的data数据

两位比较详细的解析: https://blog.csdn.net/mossbaoo/article/details/84786366 https://blog.csdn.net/u012302552/article/details/83305335

13.collection.watch实现对云端数据的实时监控

介绍利用collection.watch来实现云端数据的监控过程:https://blog.csdn.net/qq_36696964/article/details/100530080

对于可能遇到的BUG(db.collection(...).where(...).watch is not a function)提出解决方法:

// 生命周期函数--监听页面加载
 onLoad: function (options) {
 const db = wx.cloud.database()
 db.collection('Messages').where({
 name: '老王' //这里通过名字找到Messages数据集合中叫“老王”的那一条数据,也即为要监控的数据
 }).watch({
 onChange: function (snapshot) {
 //监控数据发生变化时触发
 console.log('docs\'s changed events', snapshot.docChanges)
 console.log('query result snapshot after the event', snapshot.docs)
 console.log('is init data', snapshot.type === 'init')
 },
 onError:(err) => {
 console.error(err)
 }
 })
 },

14.微信小程序读取数据超过20,100的限制方法

参考:https://blog.csdn.net/c0411034/article/details/100533151 无论小程序端单次读取数据库最多20条,云函数单次读取数据库最多100条,这是官方限制,是无法突破的,但是如果你能黑进TX改限制,那我倒头便拜。所以解决方案就是把单次查询分解成若干次

15.onReachBottom 事件为什么不能触发?

onReachBottom是你自己写的, 页面生成的事件一般都会有onReachBottom事件了, 是否被下面的事件覆盖掉,导致你自己写的事件没生效 请好好检查你的代码,估计下面还有一个onReachBottom事件

16.关于微信background-image在真机展示不出来的解决方案

解决方法:

  1. 只能在wxml中的style中指定background-image,并且url中最前面的/需要去掉。(在wxss中指定无效,加上'/'也会无效)

  2. B.图片转成base64格式

参考: https://developers.weixin.qq.com/community/develop/doc/96c5e4110d3c5512e06b2ddd6dcb8d93 https://www.jianshu.com/p/69d5fe48339d

17.报错:Some selectors are not allowed in component wxss, including tag name selectors, ID selectors, and attribute selectors

微信小程序自定义tabbar

这篇文档中的例子会导致控制台报错: VM113:1 Some selectors are not allowed in component wxss, including tag name selectors, ID selectors, and attribute selectors

报错原因:组件和引用组件的页面不能使用id选择器(#a)、属性选择器([a])和标签名选择器,请改用class选择器

解决方法:

解决办法

提示:

#a { } /* 在组件中不能使用 */
[a] { } /* 在组件中不能使用 */
button { } /* 在组件中不能使用 */
.a > .b { } /* 除非 .a 是 view 组件节点,否则不一定会生效 */

18.自定义tabbar

微信小程序自定义tabBar和遇到的一些问题

19.自定义tabbar的tabbar切换之后图标会闪烁情况处理

custom-tab-bar/index.js文件中:

  1. 将data中定义得 selected赋值为-1,不让默认选中
tabbar-selected
  1. 将methods中得switchTab函数中之前得selected赋值操作删除 (注:selected赋值在首页、分类、购物车、我的页面的onShow方法中已赋值过)

    tabbar-setData

20.图片上方叠加一个半透明颜色层,并在半透明颜色层上叠加文字

html代码:

<div class="bg_img">
    <!--图片-->
    <img src="../photo/8_cont1_6.jpg" height="152" width="225"/>
    <!--span标签 半透明背景层-->
    <span class="ms">span标签</span>
    <!--div标签 半透明背景层-->
    <div class="toumingzi">div标签</div>
</div>

Css代码:

.bg_img {
    /*相对位置*/
    position: relative;
    width: 225px;
    height: 152px;
}
 
.ms {
    /*绝对位置*/
    position: absolute;
    background: #a82327;
    /*透明度*/
    opacity: 0.8;
    /*span标签的大小*/
    width: 225px;
    height: 20px;
    /*偏移到div上*/
    left: 0;
    /*span标签下移*/
    bottom: 0.1px;
    text-align: center;
    color: white;
 
    /*copy的别人的代码,我没用到,我没深究其意 */
    /*filter:alpha(opacity=60);*/
    /*-moz-opacity:0.6;*/
}
 
.toumingzi {
    position: absolute;
    background: cornflowerblue;
    /*透明度*/
    opacity: 0.8;
    /*字体居中*/
    text-align: center;
    /*div标签上移*/
    top: 0.1px;
    width: 225px;
    height: 20px;
}

21.微信小程序使用weui扩展组件踩坑

解决办法

22.TypeError: Cannot read property '$router' of undefined at eval

解决办法

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,496评论 6 501
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,407评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,632评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,180评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,198评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,165评论 1 299
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,052评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,910评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,324评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,542评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,711评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,424评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,017评论 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,668评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,823评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,722评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,611评论 2 353

推荐阅读更多精彩内容

  • 微信小程序知识总结及案例集锦 微信小程序的发展会和微信公众号一样,在某个时间点爆发 学习路径 微信小程序最好的教程...
    junhey阅读 758评论 0 4
  • 1.学习资料相关 1.文档 名称描述小程序开发指南[https://developers.weixin.qq.co...
    Small_Cake阅读 685评论 0 0
  • 每天的学习记录,可能有的地方写的不对,因为刚学,以后发现错的话会回来改掉整体流程 https://develope...
    有点健忘阅读 4,664评论 0 7
  • 申明:本文纯属资料整理,如有违规请评论联系作者删除。 1. navigator点击出现阴影,如何去除阴影 做法:将...
    VioletJack阅读 1,979评论 1 6
  • 推荐指数: 6.0 书籍主旨关键词:特权、焦点、注意力、语言联想、情景联想 观点: 1.统计学现在叫数据分析,社会...
    Jenaral阅读 5,716评论 0 5