【快应用】为什么调用router.clear()后,立即调用router.getLength()发现页面并未销毁

 现象描述

调用router.clear()后,立即调用router.getLength()发现页面并未销毁。

 

实现方式

调用router.clear()后,页面销毁需要一定的时间,建议使用setTimeout延迟1s后再调用router.getLength(),这样就可以获取最新的页面栈数量。

代码如下:

<script>

  import router from '@system.router';

  export default {

    data: {

      photoUri: '/Common/logo.png',

      taskflag: '',

      ___PARAM_LAUNCH_FLAG___: '',

      length: '',

      pages: {},

      pageFrom: ''

    },

    onInit() {

      this.$page.setTitleBar({ text: 'deepLink' })

      var that = this;

      that.taskflag = this.___PARAM_LAUNCH_FLAG___;

      // 调用getPages方法

      let pages = router.getPages()

      // 由于获得的值是一个JSON数组,所以直接打印是打印不出来的,可以使用下面的方法来打印

      console.log("tag", this.printJSONArray(router.getPages()));

      that.pages = this.printJSONArray(router.getPages());

      that.length = router.getLength();

      console.log("pages' length = " + that.length);

    },

    printJSONArray(array) {

      let result = ""

      const suffix = ", "

      Array.isArray(array) && array.forEach((element, index) => {

        result = result + JSON.stringify(element) + (index === array.length - 1 ? "" : ", ")

      })

      return result

    },

    clear: function () {

      router.clear()

      setTimeout(() => {

        var that = this;

        // 调用getPages方法

        let pages = router.getPages()

        // 由于获得的值是一个JSON数组,所以直接打印是打印不出来的,可以使用下面的方法来打印

        console.log("tag", this.printJSONArray(router.getPages()));

        that.pages = this.printJSONArray(router.getPages());

        that.length = router.getLength();

        console.log("pages' length = " + that.length);

      }, 1000);

    }

  }

</script>

​欲了解更多更全技术文章,欢迎访问https://developer.huawei.com/consumer/cn/forum/?ha_source=zzh

posted @ 2022-12-09 09:27  华为开发者论坛  阅读(62)  评论(0)    收藏  举报