小程序上线问题记录

313 阅读2分钟

1.小程序生命周期

onload只加载一次
onshow页面显示/切入前台时触发
onready只加载一次,初次渲染完成时触发,代表页面已经可以和视图层交互
onhide页面隐藏/切入后台时触发
onunload卸小程序时调用,如redirectto/navigaBack去别的页面

2.兼容性问题安卓/苹果/编译器

2.1 时间格式

  • 苹果不可用yyyy-DD-mm的格式,操作前先转成yyyy/DD/mm

2.2 图片引入

  • 安卓不可用如ICON (5)的格式。 (未研究,但经排查是因为中间的空格)

3.真机调试问题

3.1 Toast和hideLoading,同时出现;Toast被吞了,一下闪过

  • 原因:底层的Toast和hideLoading用的是同一方法,因此只能二选一。
  • 方法:把Toast放置事件队列的最后一位,待wx.hideLoading结束后再显示出来。
setTimeout(() => {
    Toast(res.msg)
 }, 0);

4.工具方法集

4.1 整数位大号字/小数位小号字场景

<text style="font-size:76.27rpx">{{payAmount && tools.split(payAmount)[0]}}</text>
	<text style="font-size:19px;" wx:if="{{payAmount &&tools.indexOf(payAmount,'.')>0}}">.</text>
<text>{{payAmount&& tools.split(payAmount)[1]}}元加购</text>
  • 用split方法分割出小数点前后的数字,整数位小数位分别设字号,小数点通过中间那行wx:if方法控制显示隐藏

5.this.selectComponent方法注意点!

5.1 问题:使用selectComponent取到的组建为null?

   排查顺序

  • 1.是否给该组建加了选择器,如[dom里id='cpn'] 【JS中用selectComponent('#cpn')]才能取到
  • 2.由于selectComponent本质是组件选择,若被选组件未被加载或者未加载完成,则selectComponent选不到;若组件用了wx:if则会待条件为true时才渲染,这就导致上述问题。
  • 3.组件放置层级太深,就得看机器性能/加载速度了。

6.switch组件使用

  • switch UI效果图

  • 踩坑记录

  1. 原生switch右侧有5px的margin
  2. 外部是有1px的border的
  3. 因为右侧是空虚的没有边界,若要让圆点有左右偏移,先再.wx-switch-input::after 中左margin;再在.wx-switch-input.wx-switch-input-checked:after 改transform偏移量。(上下偏移直接margin)
  • 样式修改
.wx-switch-input {
  width: 74rpx !important;
  height: 48rpx !important;
  margin-right: 0px !important;
}

/*白色样式(false的样式)*/
.wx-switch-input::before {
  width: 74rpx !important;
  height: 48rpx !important;
  box-shadow: none !important;
  background-color: #E9EBED !important;
}

/* 圆点样式 */
.wx-switch-input::after {
  margin-left: 8rpx;
  box-shadow: none !important;
  width: 30rpx !important;
  height: 30rpx !important;
  margin-top: 8rpx;
}

/* 选中后的圆点 */
.wx-switch-input.wx-switch-input-checked:after {
  transform: translateX(24rpx) !important;
}

7.CSS集合

  • nth-child选择这个p元素的父元素的第二个为p的子元素
p:nth-child(2){
background:#ff0000;
}

8.解决小程序生产、开发环境接口切换问题

  • 小程序官方API:__wxConfig.envVersion-> 1.develop=开发;2.trial=体验;3.release=生产。
let API_URL = "";
function baseUrl() {
    const version = __wxConfig.envVersion; // 获取当前版本
    switch (version) {
        case 'develop':
            API_URL = "https://xy.cozzia.com.cn/chair/api"; //开发版小程序
            break;
        case 'trial':
            API_URL = "https://xy.cozzia.com.cn/chair/api"; //体验版小程序
            break;
        case 'release':
            API_URL = "https://wxchart.cozzia.com.cn/chair/api"; //线上小程序
            break;
        default:
            API_URL = "https://wxchart.cozzia.com.cn/chair/api"; //线上小程序
            break;
    }
    return API_URL;
}
baseUrl()

9.进入场景值

  • 路径:app.js-onShow的options.scene参数
  • 注意:如扫码进入,后续每次调用onShow都是延续同样的场景值。
onShow(options) {
        if (options.scene == 1011){
         .....
        }
    },