如下图所示,原本以为是微信的页面不会影响小程序,但实际上会触发返回页面的onShow()。
触发bug业务场景的详细描述:
因为业务需要,我会在下单页面触发onShow()。在onShow中,将有用于查询购物车的产品数据。如果产品数据不存在,会跳转到首页。当支付完成后,用户返回到下单页面,触发onShow生命周期,这导致查询购物车api的检索。因为订单已经创建支付,后台不存在所购汽车的产品数据,所以在跳转到成功支付页面的瞬间,页面闪烁,异步api正在执行,立即跳转回首页。
解决方案:
self.cancelOnShow=true自我。$ apply();wx . request payment({ ' timeStamp ' :d . timeStamp,' nonceStr ' : d.nonceStr,' package': d.package,' signType': d.signType,Paysign' :d.paysign,' success ' : function(RES){ console . log(RES,'微信支付返回成功');wx.setStorageSync('isSucPay ',true);wx.setStorageSync('orderCode ',order code);wx . navigateto({ URL : })。/paymentnote ',complete : function(){ self . cancelonshow=false;}})},‘fail’:函数(RES) {console.log (RES,‘微信支付失败返回’);wx.setStorageSync('isSucPay ',false);wx . setstoragesync(' return params ',{amount:balance,invoiceid : order code });wx . navigateto({ URL : })。/paymentnote ',complete : function(){ self . cancelonshow=false;} }) } });onsShow(){ if(!This.cancelOnShow) {//业务代码* * * * *}}主要是在调用支付前将cancelOnShow设置为true,然后在跳转支付成功(失败)页面的完整回调函数中,将cancelOnShow设置为false,不会影响其他后续支付。有人问,会不会自我取消如何=假;放入wx.requestPay
ment的 success 回调函数,在wx.navigateTo跳转之前,是否可行?我自身测试过,是不行的,原因自身体会去。其次,在onShow生命周期函数,要根据cancelOnShow来判断执行业务代码。问题描述: 在一个页面如果用倒计时,如果切换到其他页面返回,会看到多个倒计时在错误重碟显示。
解决代码如下:
/** * 清除interval * @param that */ clearTimeInterval: function (that) { var interval = that.data.interval; clearInterval(interval) }, /** * 生命周期函数--监听页面卸载 * 退出本页面时停止计时器 */ onUnload:function () { var that = this; that.clearTimeInterval(that) }, /** * 生命周期函数--监听页面隐藏 * 在后台运行时停止计时器 */ onHide:function () { var that = this; that.clearTimeInterval(that) }
在tab页面,运用 onHide 周期 进行 clearTimeInterval , 在 非tab页面,运用onUload() 周期 进行 clearTimeInterval。
swiper 要根据地区选择不同的内容(swiper-item)播放动画,当切换 地区的时候,我的 swiper-item 个数也在变化, 但是原 swiper 的 current 还是之前的,比如切换2张变1张数据的时候,就会 导致swiper 不显示。
解决方法和代码:
获取个人地址授权,点击取消,再去获取,无反应,这个不算bug,但是可以总结下,这块是属于 微信二次授权问题,百度也可以找到相关,代码如下:
通过 wx.openSetting 打开授权过的 权利,再次打开,在回调中,在执行你想要的业务逻辑即可。
倒计时在触摸状态拖住不放的情况下,会发现有倒计时停止了,也就是所谓的卡顿,放开,或者随便动下页面又正常(而且时间恢复得特别快),暂时未找到解决方案,有知悉的同学麻烦告知。
下面是我组队员志新同学总结的一些UI展示的坑位:
小程序button标签默认的样式不符合我们的设计稿,会出现一些比较丑的border,background等。
去除button border线条
button::after { border: 0;}
去除button背景色
button{background:none !important;}
小程序的标签貌似没有写 默认行高是多少。不过根据截图文本可以发现文本的蓝色底色范围框会比文本内容高一些。
如果担心这些蓝色的范围影响了一些设计稿的边距 ,想要收一收它的占位间隙,那么可以将视图内的文本行高设置为 1.1~1.3之间。为什么我不推荐直接设置为行高 1 呢? 因为行高为1的话,在部分安卓机器上面有坑,会出现文字 头部 一些 笔画被 截取没了,出现貌似被砍头的效果!
view,text{ line-height:(1.1 或者 1.3 ) 可以适当的收一收它默认行高的一些间隙;}
被截头就如下面的图片:
cursor-spacingNumber 指定光标与键盘的距离,单位px(2.4.0起支持rpx)。取 input 距离底部的距离和 cursor-spacing 指定的距离的最小值作为光标与键盘的距离
<inputtype="text"cursor-spacing="70"placeholder="请输入具体的营业地址">
小程序的textarea 里 placeholder提示不知道为什么,存在一个非常高的层级,平时布局放着还好,要是和一个自己写的弹出层展示,就会发现 textarea的层级比你自己写的弹出层层级还要高,导致结构穿透,紊乱。不管你自己定义的弹出层层级有多高,textarea依然会把它穿透!
解决办法:障眼法,在textarea同级在写一个view 仿textarea的样式,当你的弹出层 弹出的时候,把这个真实的 textarea先hidden起来,(注意不要用 wx:if因为display:none会把之前输入的备注内容消息又清没了)。然后把那个高仿的textarea显示出来。当弹出层消失的时候,就把高仿的textarea隐藏,真实的textarea显示出来。