首页 > 其他分享 >【快应用】快应用学习之页面周期函数onBackPress无法触发?

【快应用】快应用学习之页面周期函数onBackPress无法触发?

时间:2023-07-07 10:35:24浏览次数:38  
标签:function prompt 周期函数 shortcut ret 应用 message onBackPress

【关键词】

onBackPress、退出提示

 

【问题背景】

在学习和调试快应用的过程中,我在子页面中的onBackPress()函数中定制了退出的一个弹框提醒,将它作为组件引入父页面中,弹框却无法触发?
问题代码如下:
子页面

<template>
<!-- Only one root node is allowed in template. -->
<div class="container ">
<div class="mlr-container">
<input onclick="hasinstallShortcut" type="button" value="Check Shortcut Creation" class="btn-blue" />
</div>
<div class="mlr-container">
<input onclick="deeplink" type="button" value="Create Shortcut By Deeplink" class="btn-blue" />
</div>
<div class="mlr-container">
<input onclick="setShortcut" type="button" value="Create Shortcut" class="btn-blue" />
</div>
<div class="mlr-container">
<shortcut-button class="shortcut" add-type="5" onclick="click()"></shortcut-button>
</div>
<div class="mlr-container">
<input onclick="turnTo" type="button" value="Turn To My QuickApp" class="btn-blue" />
</div>
</div>
</template>

<style lang="sass">
        .container {
        flex-direction: column;
        justify-content: center;
        align-items: center;
        }
        .mlr-container {
        margin-top: 50px;
        margin-right: 30px;
        margin-left: 30px;
        flex-direction: column;
        }
        .btn-blue {
        background-color: #0faeff;
        color: #ffffff;
        width:600px;
        height: 150px;
        font-size: 50px;
        border-radius:15px;
        }
        .shortcut {
        margin-top: 40px;
        background-color: #0faeff;
        color: rgb(22, 203, 219);
        font-size: 40px;
        width: 500px;
        height: 100px;
        border-radius: 220px;
        align-self: center;
        text-align: center;
        opacity: 0.4;
        }
</style>

<script>
  import shortcut from '@system.shortcut';
          import prompt from '@system.prompt';
          import router from '@system.router'
module.exports = {
        onInit: function () {
        this.$page.setTitleBar({
        text: '创建桌面图标',
        backgroundColor: '#007DFF',
        backgroundOpacity: 0.5,
        });
        },
        setShortcut() {
        shortcut.install({
        message: 'Adds the shortcut to the desktop for convenient use next time.',
        success: function (ret) {
        console.log('handling createShortCut success');
        },
        fail: function (erromsg, errocode) {
        prompt.showToast({
        message: erromsg+errocode,
        duration: 2000,
        gravity: 'bottom'
        })
        }
        });
        },
        hasinstallShortcut() {
        shortcut.hasInstalled({
        success: function (ret) {
        console.log('hasInstalled success ret---' + ret);
        if (ret) {
        // 桌面图标已创建   
        prompt.showToast({
        message: 'has',
        })
        } else {
        // 桌面图标未创建
        prompt.showToast({
        message: 'has not',
        })
        }
        }.bind(this),
        fail: function (erromsg, errocode) {
        console.log('hasInstalled fail ret---' + erromsg);
        }.bind(this),
        complete: function () {
        }
        });
        },
        deeplink() {
        router.push({
        // uri: '/hello'
        uri: 'hap://app/com.yzhj.yicaiyipu'
        // uri: 'hwfastapp://com.yzhj.yicaiyipu'
        });
        },
        click(event) {
        console.log(event,event.eventStatusCode);
        prompt.showToast({
        message: event.eventMessage
        });
        },
        turnTo() {
        router.push({
        uri: `/homePage?package='com.huawei.QuickAppDemo'`
        // uri: 'hap://app/com.huawei.QuickAppDemo'
        // uri: 'hwfastapp://com.yzhj.yicaiyipu'
        });
        },
        onBackPress () {
        console.log("back!!")
        var that = this
        shortcut.install({
        message: '我看你很喜欢这个应用呢,加个桌面再退出吧',
        success: function (ret) {
        console.log('添加成功');
        that.$app.exit()
        },
        fail: function (erromsg, errocode) {
        prompt.showToast({
        message: erromsg+errocode,
        duration: 2000,
        gravity: 'bottom'
        })
        }
        })
        return true
        },
        }
        </script>

父页面

<import name="shortcut" src="../Demo/demo.ux"></import>
<template>
<!-- Only one root node is allowed in template. -->
<div class="container">
<div>
<shortcut></shortcut>
</div>
</div>
</template>

<style>
  /* .container {
    flex-direction: column;
    justify-content:flex-end;
    align-items: center;
  }
</style>

<script>
  import shortcut from '@system.shortcut';
  import prompt from '@system.prompt';
  module.exports = {
    data: {
      componentData: {
        message: '点击跳转快应用',
      },
    },
    onInit() {
      this.$page.setTitleBar({
        text: '欢迎来到快应用',
        textColor: '#ffffff',
        backgroundColor: '#007DFF',
        backgroundOpacity: 0.5,
        menu: true
      });
    },
  }
</script>

控制台输出如下:

cke_1345.png​​​

没有打印"back!!"。

 

【问题分析】
这是方法调用返回值不正确或者使用位置不对导致的。根据华为开发者官网里面对快应用页面生命周期函数以及相关案例的介绍:

开发者若想重写onBackPress生命周期,在里面自定义返回逻辑,返回值必须为true,否则快应用引擎会按照false处理,页面直接退出。且作为子组件引入时,onBackPress方法不能写在子组件中,得写在父组件中才行。

 

【解决方法】
确保返回值为true,把子组件里面的onBackPress方法移动到父组件中来,这个问题就可以解决了。

cke_2797.png​​​

打印内容出现,且出现弹窗。

标签:function,prompt,周期函数,shortcut,ret,应用,message,onBackPress
From: https://www.cnblogs.com/mayism123/p/17534150.html

相关文章

  • 【HarmonyOS】【FAQ】HarmonyOS应用开发相关问题解答(三)
    ​贴接上回。。。 【往期FAQ参考】【HarmonyOS】【FAQ】HarmonyOS应用开发相关问题解答(一)【HarmonyOS】【FAQ】HarmonyOS应用开发相关问题解答(二) 【本期FAQ】1、第一次调用geolocation.getCurrentLocation()接口,弹出权限弹框后并未返回结果,再次调用接口才会成功返回?(API8......
  • Blazor学习之旅(3)实现一个Todo应用
    最近在学习Blazor做全栈开发,因此根据老习惯,我会将我的学习过程记录下来,一来体系化整理,二来作为笔记供将来翻看。本篇,我们通过一个简单的Todo示例应用来介绍如何实现基础的数据绑定和事件。添加Todo组件在Pages目录下,新增一个Razor组件,命名:Todo.razor@page"/todo"<h3>Todo<......
  • 正则在字符串中的简单应用
    1'''2正则表达式的方法3'''45importre#0.导入正则模块67'''81.使用re.search()方法进行搜索匹配91.预编译正则表达式模式:如果你需要多次使用同一个正则表达式模式,建议使用re.compile()方法预先编译该模式(#预编译正则表达式模式regex=re......
  • 携手华南理工大学培育数据库人才,“巨杉数据库管理与应用奖学金”颁奖仪式隆重举行
    巨杉数据库作为新一代国产分布式数据库的领军者,长期致力于高校人才培养,近期在为华南理工大学学子颁发专项奖学金,为培育国产数据库及金融科技人才发力。近期,巨杉数据库奖学金颁奖仪式在华南理工大学举办。该奖学金由巨杉数据库设立,旨在表彰华南理工大学的优秀学子,产学研联合推动分......
  • Blazor学习之旅(2)第一个Blazor应用
    本篇我们来构建第一个BlazorWeb应用,这里我们选择BlazorServer类型,后面我们再学习BlazorWebAssembly类型。话外音:有人问我西门子在用Blazor吗?是的,西门子德国的两家数字化工厂都有在用Blazor开发Web应用,特别用到了MudBlazor这个UI组件库并封装一个完整的内部系统开发模板,值得关......
  • 深入理解ASEMI整流桥KBP210特性及其应用
    编辑-Z在电子工程领域,整流器是一种重要的元件,它能将交流电(AC)转换为直流电(DC)。其中,整流桥KBP210是一种常见的整流器,因其优秀的性能和广泛的应用,受到了工程师们的青睐。本文将深入探讨整流桥KBP210的特性、工作原理以及应用。 首先,我们来了解一下整流桥KBP210的基本特性。KBP210......
  • 第三届计算机应用与信息安全国际会议(ICCAIS2023)
    由湖北省众科地质与环境技术服务中心主办的2023第三届计算机应用与信息安全国际会议(ICCAIS2023)将于2023年12月20-22日在中国武汉召开。 ICCAIS2023力图建立 一个国际化的计算机应用与信息安全领域的学术交流平台,分享最新进展和研究成果。期待您的参与。 ★重要信息大会时间:20......
  • C/C++ Qt 数据库与SqlTableModel组件应用
    SqlTableModel组件可以将数据库中的特定字段动态显示在TableView表格组件中,通常设置QSqlTableModel类的变量作为数据模型后就可以显示数据表内容,界面组件中则通过QDataWidgetMapper类实例设置为与某个数据库字段相关联,则可以实现自动显示字段的内容,不仅是显示,其还支持动态增删改查......
  • 多领域应用落地,火山引擎ByteHouse加速云数仓升级
     更多技术交流、求职机会,欢迎关注字节跳动数据平台微信公众号,回复【1】进入官方交流群 近日,火山引擎数智平台VeDI直播活动「超话数据」在线举办,来自火山引擎的产品及解决方案专家分享了以ByteHouse为代表的云数仓产品在字节跳动的演进过程、关键技术以及最佳实践,并通过......
  • 驱动开发:通过应用堆实现多次通信
    在前面的文章《驱动开发:运用MDL映射实现多次通信》LyShark教大家使用MDL的方式灵活的实现了内核态多次输出结构体的效果,但是此种方法并不推荐大家使用原因很简单首先内核空间比较宝贵,其次内核里面不能分配太大且每次传出的结构体最大不能超过1024个,而最终这些内存由于无法得到更好......