zoukankan      html  css  js  c++  java
  • 页面生命周期onShow没有触发

    现象描述:

      通过router.push接口跳转到快应用的B页面,当B页面只是引用一个自定义组件XX的时候,B页面的onShow生命周期无法触发。如下图所示:

    代码如下:

          B页面代码:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    <import name="listone" src="./aa.ux"></import>
    <template>
      <!-- template里只能有一个根节点 -->
    <listone></listone>
    </template>
    <script>
      import prompt from '@system.prompt'
      export default {
        private: {
        },
        onInit: function () {
        },
        onShow() {
          console.log('我显示了我显示了我显示了我显示了');
          prompt.showToast({
            message: '我显示了我显示了我显示了我显示了'
          })
        }, //无法触发
      }
    </script>
      
    <style>
      .demo-page {
        flex-direction: column;
        justify-content: center;
        align-items: center;
      }
      
      .title {
        font-size: 40px;
        text-align: center;
      }
    </style>

    自定义组件aa.ux:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    <template>
      <div class="container">
        <text>天气不错啊</text>
        <text>天气不错啊</text>
        <text>天气不错啊</text>
        <text>天气不错啊</text>
      </div>
    </template>
    <style>
     .container {
        flex-direction: column;
        justify-content: center;
    align-items: center;
    #00fa9a;
      }
    </style>
    <script>
      module.exports = {
        data: {
        },
        onInit() {
        },
      }
    </script>

    问题分析:

    快应用引擎框架决定了自定义组件作为B页面的根节点时,B页面的onShow生命周期是无法触发的,但是子组件自身的onShow可以触发。

    解决方案:

    在B页面的子组件外面加个div组件作为根节点,而不是把自定义组件作为根节点,这样B页面的onShow生命周期就可以触发了。

    B页面修改后代码如下(见红色部分):

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    <import name="listone" src="./aa.ux"></import>
    <template>
      <!-- template里只能有一个根节点 -->
      <div>
        <listone></listone>
      </div>
      
    </template>
    <script>
      import prompt from '@system.prompt'
      export default {
        private: {
        },
        onInit: function () {
        },
        onShow() {
          console.log('我显示了我显示了我显示了我显示了');
          prompt.showToast({
            message: '我显示了我显示了我显示了我显示了'
          })
        },
      }
    </script>
      
    <style>
      .demo-page {
        flex-direction: column;
        justify-content: center;
        align-items: center;
      }
      
      .title {
        font-size: 40px;
        text-align: center;
      }
    </style>

    修改后代码如下图所示:

    欲了解更多详情,请参见:

    快应用生命周期:

    https://developer.huawei.com/consumer/cn/doc/development/quickApp-References/quickapp-script#h2-1575381018573

    原文链接:https://developer.huawei.com/...
    原作者:Mayism

  • 相关阅读:
    MDK中编译程序后Program Size详解
    win10快速访问的文件夹无法删除的解决方法
    stm32类型cl、vl、xl、ld、md、hd的含义
    史上最全软件测试工程师常见的面试题总结(四)【多测师_王sir】
    基于PO和单例设计模式用python+selenium进行ui自动化框架设计【多测师】
    经典的Python编程题【多测师_王sir】
    Java中的泛型【多测师_王sir】【软件测试】
    Java设计模式之单例模式、工厂模式、PO模式【多测师_王sir】
    Java+Selenium做UI自动化中@FindBy和@CacheLookup用法【多测师_王sir】
    postman中接口的入参为图片的处理方式【多测师_王sir】
  • 原文地址:https://www.cnblogs.com/developer-huawei/p/15048925.html
Copyright © 2011-2022 走看看