首页 > 其他 > 详细

wepy-开发总结

时间:2019-07-26 11:55:06      阅读:77      评论:0      收藏:0      [点我收藏+]

开发小程序中,遇到的wepy的几点坑,记录一下;

1.定时器:

  在页面中有需要用到倒计时或者其他定时器任务时,新建的定时器在卸载页面时一定要清除掉,有时候页面可能不止一个定时器需求,在卸载页面(onUnload钩子函数)的时候一定要清除掉当前不用的定时器

  定时器用来做倒计时效果也不错,初始时间后台获取,前端处理,后台直接在数据库查询拿到的标准时间(数据库原始时间,T分割),前端需要正则处理一下这个时间:

let overTimeStr = data.over_time.split(‘T‘)
let time1 = overTimeStr[0].replace(/-/g,",")
let time2 = overTimeStr[1].replace(/:/g,‘,‘)
let overTime = time1+ ‘,‘ + time2
let overTimeArr = overTime.split(‘,‘)
that.countDownCtrl( overTimeArr, 0 );

最终把时间分割为[年,月, 日, 时, 分, 秒]的数组,(如果后端已经把时间处理过了那就更好了),然后把该数组传递给倒计时函数:

   countDownCtrl( time, group ) {
        let deadline = new Date()//免费截止时间,月的下从0开始
        deadline.setFullYear(time[0], time[1]-1, time[2])
        deadline.setHours(time[3], time[4], time[5])
        let curTimeJudge = new Date().getTime()
        let timeJudge =  deadline.getTime()-curTimeJudge
        let remainTimeJudge  = parseInt(timeJudge/1000)
        if( remainTimeJudge < 0) {
            log(‘倒计时已经过期‘)
            return;
        }
        this.interva1 = setInterval(() => {
            let curTime = new Date().getTime()

            let time =  deadline.getTime()-curTime  //剩余毫秒数
            let remainTime  = parseInt(time/1000) //总的剩余时间,以秒计

            let day = parseInt( remainTime/(24*3600) )//剩余天
            let hour = parseInt( (remainTime-day*24*3600)/3600 )//剩余小时
            let minute =  parseInt((remainTime-day*24*3600-hour*3600)/60)//剩余分钟
            let sec = parseInt(remainTime%60)//剩余秒
            hour = hour < 10 ? ‘0‘ + hour : hour;
            minute = minute < 10 ? ‘0‘ + minute : minute
            sec = sec < 10 ? ‘0‘ + sec : sec
            let countDownText = hour+ ":" +minute+ ":" +sec
            if( group === 0) {   //个人业务逻辑,因为一个页面有两个倒计时需求,代码复用区分
                this.countDown = countDownText;
            } else if( group === 1 ) {
                this.countDownGroup = countDownText
            }
            this.$apply()
        }, 1000 ); 
    }

至此,倒计时效果处理完毕,PS:终止时间一定要大于currentDate,否则显示会出现异常(包括但不限于倒计时闪烁、乱码等)

最后,退出该页面去其他页面时,一定要在页码卸载钩子中清除倒计时!!!

onUnload() {
    clearInterval(this.interva1);
}

2.三层组件,阻止点击事件传播:

   三层组件嵌套,第三层的点击事件不能传到第一层去,适用于遮罩层+picker,阻止事件点击向上传播,因为每一层都添加有点击事件,互不干扰、

   解决: 添加函数 catchtap="funcName" 即可,funcName可为空函数,也可以直接不写

3.组件传值:

  组件传值和Vue有点细微区别,Vue强调父组件的数组和对象不要直接传到子组件使用,应为子组件可能会修改这个data,如图:

技术分享图片

  但是,wepy中,有时候确实需要把一个对象传递到子组件使用,单个传递对象属性过于繁琐,而且!!!如果单个传递对象的属性到子组件,如果该属性是一个数组,则子组件永远会接收到 undefined 。此时最好用整个对象传值替代单个对象属性逐个传值的方法,

且一定要在传值时加入  .sync 修饰符,双向传值绑定。确保从接口拿到的数据也能传递到子组件,而非 undefined 

  

:circleMembersList.sync="circleMembersList"

4.token判断

  在与后台交互的时候,token必不可少。尤其是在小程序分享出去的链接,由其他用户点开分享链接进入小程序内部,此时更是要判断token,token的判断一般选在 onShow()钩子执行而不在 onLoad()钩子内执行。若不存在token,则应该执行登录去拿取token

5.formID

  微信提供了服务通知,即在你支付、快递等行为时,微信会直接给你发一个服务通知来提醒,每次提醒都会消耗该用户存储的formID,formID为消耗品,用一个少一个,只有通过用户的表单提交行为才可以拿到formID,

<form @submit="submitForm" report-submit="true">
    <button form-type="submit" class="editCard" @tap = "goModifiPage(‘editFormTab‘)">修改</button>
</form>
submitForm(e) {
    this.postFormId( e.detail.formId )
}

 

  

wepy-开发总结

原文:https://www.cnblogs.com/fanghl/p/11248736.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!