uni-app微信小程序开发,提前阅读(一定要看,防止踩坑)

纯粹小程序新手实战指引,开发中需要注意的点(都是经验)开发中肯定会遇到的疑惑,用5分钟换来几小时的效率。记录一些官方文档没有的踩坑点。

1、<uni-popup></uni-popup>组件设置全屏覆盖

设置宽度和高度100%是没用的
需要在里面加设置一层view,并且设置对应宽高分别为vw和vh

<uni-popup>
  <view class="wrap_test"> </view>
</uni-popup>

<style lang="scss">
  .wrap_test{
  width:100vw;
  height:100vh;
}
</style>
2、wx.onNetworkStatusChange、uni.onNetworkStatusChange网络状态监听不生效问题

1、该方法只能在手机上进行验证才能生效,小程序开发工具上面不生效
2、该方法只能写在onLoad方法里面,写在mounted方法不生效

错误写法❌

  mounted() {
     uni.onNetworkStatusChange(function (res) {
       console.log('onNetworkStatusChange', res);
     });
  },

正确写法✔,手机上打开关闭数据、切换wifi连接都可以看得到效果

  onLoad(data) {
    wx.onNetworkStatusChange((res) => {
      console.log('res' , res);
    });
  },
3、接口请求写在哪里好?(即返回页面不刷新问题)

1、可以写在onShow、onLoad、created、mounted

但是:写在onShow里面最好

原因:在很多情况下跳转后都需要刷新页面数据。因为onshow是在页面展示时候触发,通过uni.navigateTo不会销毁页面,返回时候页面的onLoad不会触发。例如通过导航栏返回按钮图标或者uni.navigateTo跳转到指定页面需要刷新页面数据时候,onShow只要页面展示了就会请求。

2、需要通过onLoad的参数来发起请求怎么办?

  onLoad(data) {
    this.prePageParams = data;  // 先把参数存起来
  },
  onShow() {
    this.fetch(this.prePageParams);  // 再拿到参数发起请求
  },
4、uni-app微信小程序margin-bottom失效(有且只有ios系统上是失效的)

蓝色的区域是position:fixed。(因为写了这个,会导致ios上设置margin-bottom失效无效)
图中图片需要距离底部,不能被蓝色部分遮住,我写了margin-bottom,在模拟器上以及安卓手机是可以的,但是ios系统会不行。

安卓机型、模拟器上生效

如果是真机上,ios手机就会出现这种问题,导致图片被遮住(这张图演示ios上失效的示例)

解决办法:在底部增加一个空白的view设置高度即可


5、微信小程序button通过数组的length判断disabled无效(数组length === 0写法无效)

例子:
给selectedKeys.push()进数据的时候按钮还是禁用的。

        <button type="default" @click="handleTag" :disabled="selectedKeys.length === 0">
          标记
        </button>

这种写法是无效的,是微信小程序的一个bug
虽然button的组件是由uni-app提供的,在由小程序运行时候,会转为小程序的button。
微信开放社区,有个相同的提问,官方回复:

解决办法:

1、直接使用length即可(推荐)

<button   type="default"  @click="handleTag"  :disabled="selectedKeys.length">
       标记
</button>

2、通过computed计算属性

<button type="default" @click="handleTag" :disabled="test">
    标记
</button>

// vue中的computed
  computed: {
    test() {
      return this.selectedKeys.length === 0;
    },
  },
6、无法动态引入javascript脚本

不能像web端一样写script标签引入,因为不支持动态加载<script scr=''> </script>这种方式 引入,无法解决,你只需要知道即可。

7、swiper无法动态设置circular怎么办?

和问题5有点类似,解决办法一样使用computed

<template>
  <swiper :circular="!canCircular" >  </swiper>
</template>

export default {
  data() {
    return {
      photoListData:[]
    }  
  },
  computed: {
    canCircular() {
      return this.photoListData.length > 0;
    }
  }
}
8、IOS苹果手机上时间格式化错误显示Invalid Date

只在真机IOS上面才会出现,小程序模拟器上的ios是不会出现的,原因是因为时间格式只要带有-符号就会(但有个ios机型却不会出错,我用苹果11测试会出现Invalid Date)。有几种情况,例如:
1、new Date('2022-01-05')这样写,会出错,变成Invalid Date
2、后端返回这种时间格式:2022-01-05T11:24:04.000+0800,如果使用dayjs格式化
dayjs(2022-01-05T11:24:04.000+0800).format( 'MM/DD HH:mm')会同样显示错误。

解决办法(三种):

1、正常的时间格式直接replace

let time = "2020-03-30 14:39"
let TF = new Date(time.replace(/-/g,'/'))

2、使用moment时间格式化(缺点是它比较大这个包)

moment(2022-01-05T11:24:04.000+0800).format( 'MM/DD HH:mm')

3、如果针对后端返回的那个格式:2022-01-05T11:24:04.000+0800,还想使用dayjs(它包非常小,小程序上面很实用),需要自己转换替换下符号'-'

// 先转换格式
const resolveTimeOnIos = (time) => {
  let data = '0/0/0 00:00';
  if (time && time.indexOf('-') !== -1 && time.indexOf('+') !== -1) {
    const translate = time
      .replace(/T/g, ' ')
      .replace(/\.[\d]{3}Z/, '')
      .replace(/(-)/g, '/');
    data = translate.substring(0, translate.indexOf('.'));
  }
  return data;
}

const  time = '2022-01-05T11:24:04.000+0800'  // 这种格式时间转换
const translateTime = resolveTimeOnIos (time)  // 先转换
dayjs(translateTime ).format( 'MM/DD HH:mm')  // 使用dayjs格式换格式
9、px和rpx相加计算不准确问题(吸顶效果的实现在不同机型存在间隙误差问题)

什么时候会碰到这个问题?当需要吸顶效果,并且,头部是自定义的头部。
我用的是在uniapp组件库下载的一个叫做zhouWei-naeBar的组件,用于自定义头部(这个组件在源码里面写了 92rpx 的高度,记住这是前提)。


吸顶的top高度 = 自定义头部的高度 + 不同机型的刘海高度。


所以吸顶top值就为:

top = 92rpx + uni.getSystemInfoSync()['statusBarHeight']

但是由于小程序获取到的刘海高度是以px像素为单位的,这就很操蛋!
会变成

top = 92rpx + 43px   // (假设获取到是43px)

这样计算出来的单位是不一致的,通过不同的dpr计算也不行,不同机型会有吸顶间隙的问题

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

推荐阅读更多精彩内容