微信小程序开发技巧及填坑记录 - 程序猿--少停

shaoting 2021-12-01 原文


微信小程序开发技巧及填坑记录


以下是自己在开发过程中遇到的坑和小技巧,记录以下:

1.出现了 page[pages/XXX/XXX] not found.May be caused by :1. Forgot to add page route in app.json.2. Invoking Page() in async task.

截图如下:

解决办法:需要在每个XXX.js文件中加入page(),以用来生成一个页面实例对象.

Page({

});

有时就算你在每个js文件中都写了基本的page()代码,还是会保这个错误,这时需要注意app.json里面的路由填写顺序,如一般二级界面就写在一级界面的下面,千万别写在末尾.如:

正确写法:

错误写法:

 同时,也得注意默认自带index和logs这两个,通常一般都是放在末尾,有时我放在中间部分,下方的部分页面也会出现.有时出现这个错误完全只是开发工具的问题,重启下就好了(公测第一版的开发工具bug太多).

2.网络请求:对于网络请求也是一个大坑.一如既往,小程序只能使用https,除非使用破解之后的开发工具,并且不能在真机运行.https://github.com/gavinkwoe/weapp-ide-crack

对于网络请求,最常使用的是POST请求,但是这就是微信小程序的大坑所在.官方的文档及其简陋,连入门都不够的.对于post请求,我们需要把data改为formData传过去才行.

首先在Utils文件夹中的Util.js文件文写出以下代码,用来把参数转为formData

//参数data转formData
function json2Form(json) {  
    var str = [];  
    for(var p in json){  
        str.push(encodeURIComponent(p) + "=" + encodeURIComponent(json[p]));  
    }  
    return str.join("&");  
}  
module.exports.json2Form = json2Form

然后在post请求的文件中,引入该Util.js文件

var Util = require( \'../../../utils/util\');

接下来就是修改request方法:

    //调用应用实例的方法获取全局数据
    wx.request({
      url: \'http://www.pintasty.cn/productdetail/findproductdetailbyid\',
      method: \'POST\',
      header: {
        "content-type": "application/x-www-form-urlencoded"     //这里的改,一开始Content-Type可以,现在只能使用content-type
      },
      data:  Util.json2Form( { product_id:"P-2c22ad5be9b24a5da0cd5d8594e8ec32",uploadImgId : "UU-60a0e559b0a0421d892232fc75ee9d17" }),  //这里得改,参数只能这样传入
      success: function (res) {
        console.log(\'酒品详情\' + JSON.stringify(res))
        that.setData({
           wineData:res.data.data,
           bigPicture:res.data.data.bigPicture
        })
      },
      fail: function (res) {
        console.log(\'失败\' + JSON.stringify(res))
      },
    }) 

 然后就行了,因为我的是破解版开发工具,所以可以http.

 3.在XXX.js文件中获取屏幕的宽高.

 主要根据小程序提供的getSystemInfo()方法,该方法可以获取到设备的常用信息,如手机型号.设备像素比.屏幕宽高等等.最常用的就是屏幕宽高了

//获取屏幕宽度
var screenWidth = wx.getSystemInfo({
  success: function (res) {
    screenWidth = res.windowWidth
  }
})
//获取屏幕高度
var screenHeight = wx.getSystemInfo({
  success: function (res) {
    screenHeight = res.windowHeight
  }
})
Page({
  onLoad:function(){
    console.log(\'屏幕高度:\'+screenHeight)
    console.log(\'屏幕宽度:\'+screenWidth)
  }
})

  

http://www.jb51.net/article/93994.htm 

 3.使用rpx在实现基本的屏幕自适应.

rpx单位是微信小程序中css的尺寸单位,rpx可以根据屏幕宽度进行自适应。规定屏幕宽为750rpx。如在 iPhone6 上,屏幕宽度为375px,共有750个物理像素,则750rpx = 375px = 750物理像素,1rpx = 0.5px = 1物理像素。

设备 rpx换算px (屏幕宽度/750) px换算rpx (750/屏幕宽度)
iPhone5 1rpx = 0.42px 1px = 2.34rpx
iPhone6 1rpx = 0.5px 1px = 2rpx
iPhone6s 1rpx = 0.552px 1px = 1.81rpx

 

 

 

微信小程序也支持rem尺寸单位,rem和rpx的换算关系:rem: 规定屏幕宽度为20rem;1rem = (750/20)rpx  

注:开发微信小程序时设计师可以用 iPhone6 作为视觉稿的标准。
建议:设计稿使用设备宽度750px比较容易计算750px的话1rpx=1px,这样的话,设计图上量出来的尺寸是多少px就是多少rpx,至于在不同的设备上实际上要换算成多少个rem就交给小程序自己换算

4.sublime福音:微信小程序组件及API补全插件

http://www.cnblogs.com/zhengrunlin/p/5951224.html?hmsr=toutiao.io&utm_medium=toutiao.io&utm_source=toutiao.io

5.微信推出了一套官方样式库,方便大家开发,对于一些类似的UI界面我们需要引入即可,无需重复造轮子.

附上github地址:     https://github.com/weui/weui-wxss

我们只需导入weui.wxss等即可减少大量的css布局工作.

 6.请求openid不允许在移动直接请求,需要移动先请求后台,后台再请求微信,微信返回后台,后台返回移动端的流程,和支付类似.

之前,我们直接在移动端请求微信的接口,但是会出现管理后台更新域名配置这个错误.发帖请求官方得以下回复:

https://developers.weixin.qq.com/blogdetail?action=get_post_info&docid=6d6ea93d0ef1e34bcb225f6c43b87832&token=1989271305&lang=zh_CN

再询问网友,得知移动端直接请求这个微信6月份已被禁止了.白忙活一天.

https://mp.weixin.qq.com/debug/wxadoc/dev/api/api-login.html#wxchecksessionobject

 7.使用mpvue,屎一样的bug:Newline required at end of fine but not found.

 如图:

 

报错位置:

 

只需要在app.$mount()下方再来一行空白行即可.

 8.小程序通过background-image设置背景图片

微信小程序通过background-image设置背景:只支持线上图片和base64图片,不支持本地图片;base64图片设置步骤如下:

a.在网站http://imgbase64.duoshitong.com/上将图片转成base64格式的文本

b.在WXSS中使用以上文本:background-image: url(“data:image/png;base64,iVBORw0KGgo=…”);

c.为了是背景图片自适应宽高,可以做如下设置:

background-repeat:no-repeat; background-size:100% 100%;-moz-background-size:100% 100%;
 
9. 微信小程序父组件调用子组件的方法
10.微信小程序之父子间组件传参
11.微信小程序返回页面传参方法
12.使用自定义导航栏怎么使用刷新功能:
13.加载网络图片时先使用占位图,当加载出来再显示。
 
14.遇到 SyntaxError: Unexpected end of JSON input
我是同一设备不同账号遇到这个问题,百思不得骑姐。。。fuck,最后百度获得:
15.同时两次请求之间,第二次的loading会被第一次的loading给覆盖,导致第二次彻底不显示。。。。直接在hideLoading的时候加个定时器即可

 16,在wxml中执行较为复杂的逻辑运算。

https://blog.csdn.net/weixin_41077029/article/details/99636675

 

17.监听某个视图是否在屏幕之上

https://blog.csdn.net/qq_25324335/article/details/83687695

后续的工作遇到再添加.

 

 

 

 

 

 

 

发表于
2016-11-10 15:57 
程序猿–少停 
阅读(34659
评论(10
编辑 
收藏 
举报

 

版权声明:本文为shaoting原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/shaoting/p/6051261.html

微信小程序开发技巧及填坑记录 - 程序猿--少停的更多相关文章

  1. 简单 申请 msn.com邮箱 @

           使用msn messenger 要申请msn的帐号,你可以选 ×××@msn.com 和 ××× […]...

  2. SQL Server使用证书最小粒度授权 – 冲杀

    最近在项目中某个功能遇到了阻塞造成的Time out错误。所以需要在执行该功能的时候开启一个线程检测SQL S […]...

  3. 运维啊,您还真的删库? – 兔子托尼啊

    运维啊,您还真的删库? 2020-02-25 14:20  兔子托尼啊  阅读(249)  评论(0)  编辑 […]...

  4. Mysql分析sql语句 – 码农记录

    Mysql分析sql语句 1.简述   在开发完成后,随着数据量的增加我们会遇到一些MySQL的性能问题。要想 […]...

  5. 简单计算器 – 张明明_1

    简单计算器 Description 读入一个只包含 +, -, *, / 的非负整数计算表达式,计算该表达式的 […]...

  6. emoji表情-在做聊天的时候用得到 – 阿宇哥

    emoji表情-在做聊天的时候用得到 emoji表情-在做聊天的时候用得到  ...

  7. Google Chrome如何将网页保存为mhtml 单文件 – 杭州糊涂虫

    Google Chrome如何将网页保存为mhtml 单文件 原文:https://jingyan.baidu […]...

  8. 什么叫WMS – 宽田

    WMS(Warehouse Manage System),即仓库管理系统……..   […]...

随机推荐

  1. 北大研三,为何会这般焦虑?是读博还是就业?

    前天星球里一位球友给我的提问,这个问题其实很有代表意义,而回答的角度很多,我一直秉承的是向上的心态,积极的面对 […]...

  2. css属性position: static|relative|absolute|fixed|sticky简单解析

    relative,参照物为自己。 absolute,参照物为有定位(非static定位)的父元素。 fixed […]...

  3. php 实现店铺装修3

    /** * @title 装修店铺 * @param plate_id 是 int 店铺装修样式ID * @p […]...

  4. sys.argv的意义[转]

    sys.argv的意义 原文地址:https://www.cnblogs.com/zzliu/p/107750 […]...

  5. js实现页面部分区域全屏显示及退出

    <html> <meta http-equiv=”Content-Type […]...

  6. 龙卷风网络收音机(CRadio) v2.96最新版下载

    只要鼠标轻轻一点,就可以听遍全世界的声音。 龙卷风网络收音机是一款绿色软件,收集了全世界2000多个网络电台, […]...

  7. Elasticsearch的基友Logstash

    Logstash 是一款强大的数据处理工具,它可以实现数据传输,格式处理,格式化输出,还有强大的插件功能,常用 […]...

  8. Dynamics CRM实体系列之1:N、N:1以及N:N关系

    Dynamics CRM在实施过程中会遇到很多多个实体关联的问题,这样可以实现多个实体的记录通过关联的字段实现 […]...

展开目录

目录导航