关于 uniapp使用uni.$once监听事件 事件多次执行的问题解决

业务场景:

  某个工单任务在员工执行过程中需要转办工单给他人执行,此时从工单页跳转到执行人列表(通讯录)页面选择其他员工执行。

编码思路:

  跳转到执行人列表页获取到选择的执行人信息;返回上一级同时并带回选择执行人数据;

解决方法:

  利用uni.$once监听,执行人列表返回时触发方法,在工单页的onShow()周期函数中写入uni.$once()接受传回数据。

问题描述:

  通过执行人列表的 选择完毕 按钮返回无异常,但如果直接通过导航栏的返回不经过选择按钮返回工单页,工单页onShow()中的uni.$once虽然并没有被执行,但是其实方法执行次数存在积累,并在后面通过正常的监听方法(点击选择完毕)执行时 一次性执行完毕。

  比如 工单页跳转到执行人列表选择页面,执行人列表通过选择完毕(方法绑在这个按钮上)返回上一级,监听正常。但是如果工单页跳转到执行人列表选择页面,执行人列表通过导航栏的返回按钮返回工单页,虽然once内容没有执行,但是积累了一次监听,当我再次进入执行人列表点击选择完毕时,这时uni.$once就会一次性直接执行两次。如果这个里面写了请求方法,就会发起两次请求,造成可能的请求报错与资源浪费。

 

 问题解决:

  在执行人列表页 的生命周期函数onUnload() { uni.$off('op_user'); }中加入uni.$off()关闭监听即可,即每次关闭页面都取消监听。

posted on 2022-01-05 14:09  泔茶先呐  阅读(2729)  评论(0编辑  收藏  举报

导航