【问题】

uniapp开发App,发现无法在onLoad及onUnload生命周期内触发及销毁子组件内的激光扫码的监听事件。

子组件内示例代码如下:

<script>
export default {
  onLoad() {
    //监听扫码
    uni.$on("scanCodeData", (data) => {
     // TODO。。。
    });
  },
  onUnload() {
    // 移除监听事件
    uni.$off("scanCodeData");
  },
}
</script>

【解决】

根据uniapp官方描述可得:

onLoad及onUnload为uniapp为页面生命周期,created及beforeDestroy为组件生命周期。

当我们使用navigateTo或者redirectTo等路由跳转页面时,可以使用页面生命周期内的函数进行相应的方法触发,但是当我们打开一个组件,想立马触发其内部的一个方法时,此时就要改用组件生命周期内的函数进行相应的方法触发。

示例代码改为如下后,即可正常触发及销毁子组件内激光扫码事件:

<script>
export default {
  created() {
    //监听扫码
    uni.$on("scanCodeData", (data) => {
     // TODO。。。
    });
  },
  destroyed() {
    // 移除监听事件
    uni.$off("scanCodeData");
  },
}
</script>

详见:
【官方】uniapp页面生命周期
【官方】uniapp组件生命周期
【官方】uniapp路由跳转

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐