【快应用】快应用学习之页面周期函数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 = thisshortcut.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​​

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/17504.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

第124天:内网安全-代理技术Socks协议路由不出网后渗透通讯CS-MSF上线

知识点 #知识点&#xff1a; 1、代理软件使用-Win&Linux 2、代理协议使用-Socks4/5 3、CS&MSF-网络通讯&控制上线-隧道技术&#xff1a;解决不出网协议上线的问题&#xff08;利用出网协议进行封装出网&#xff09; -代理技术&#xff1a;解决网络通讯不通的问题&…

多线程——python进阶知识

多线程与多进程的区别 多线程是单个内核通过锁的手段实现同一时间运行多个程序&#xff0c;在某些情况下可以提升总体的运行效率。同时为了防止多个线程在对同一数据进行修改时导致的不可预测的后果&#xff0c;需要借助锁、队列等保证进程的同步。 多进程是多个内核执行多个…

人工智能学术顶会——NeurIPS 2022 议题(网络安全方向)清单、摘要与总结

按语&#xff1a;随着大模型的崛起&#xff0c;将AI再次推向一个高峰&#xff0c;受到的关注也越来越大。在网络安全领域&#xff0c;除4大安全顶会外&#xff0c;一些涉及AI的安全话题&#xff0c;包括对AI的攻防研究&#xff0c;以及应用AI做安全的研究方向&#xff0c;也会发…

快讯丨北京市委书记尹力到极智嘉调研指导

据北京日报7月4日报道&#xff0c;2023全球数字经济大会开幕前夕&#xff0c;市委书记尹力围绕“深入学习贯彻新时代中国特色社会主义思想&#xff0c;推进全球数字经济标杆城市建设”&#xff0c;到海淀区、朝阳区调查研究。 7月3日下午&#xff0c;北京市委书记尹力到极智嘉全…

ThreadLocal(全)- 代码实现

ThreadLocal是Java中一个非常重要的线程技术。它可以让每个线程都拥有自己的变量副本&#xff0c;避免了线程间的竞争和数据泄露问题。在本文中&#xff0c;我们将详细介绍ThreadLocal的定义、用法及其优点。 ThreadLocal是Java中一个用来实现线程封闭技术的类。它提供了一个本…

环境搭载vscode

Windows 10 下 VS Code 配置 C 开发环境&#xff08;MinGW&#xff09; 读书读傻了哟 配置 C/C 环境   主要是配置launch.json、tasks.json这两个文件&#xff08;当然&#xff0c;还有别的.json文件&#xff0c;可有可无&#xff09;。这两个文件位于.vscode文件夹下&#…

ubuntu实现自动挂载u盘

ubuntu实现自动挂载u盘 但是&#xff0c;有些设施可以在没有图形工具的情况下进行复制&#xff0c;并且在系统上占用的空间非常小。 例如&#xff0c;在我的设置中&#xff0c;我已经实现了USB自动挂载服务&#xff0c;而无需使用任何外部工具/服务&#xff0c;只有udev和syst…

GAN:生成对抗网络的突破与应用

第一章&#xff1a;引言 在当今信息时代&#xff0c;人工智能技术的发展如日中天。其中&#xff0c;生成对抗网络&#xff08;GAN&#xff09;作为一种强大的生成模型&#xff0c;引起了广泛的关注和研究。GAN通过两个相互对抗的神经网络&#xff0c;即生成器和判别器&#xf…

vite性能优化提升开发体验之hmr和预编译

一、vite中的预编译 1. 预编译概念介绍 Vite&#xff0c;一个由Vue.js开发者尤雨溪开发的新型前端构建工具&#xff0c;主要利用了现代浏览器支持的ESM&#xff08;ES模块&#xff09;来进行快速开发。Vite在法语中意为“快”&#xff0c;其中最大的亮点就是其开发服务器启动…

18 SAR图像和光学图像的配准算法(matlab程序)

1.简述 合成孔径雷达(synthetic aperture radar,SAR)图像配准的主要目标是对同一或不同传感器在不同时间、不同视点捕获的SAR图像进行配准。SAR因具有全天候成像能力和地物穿透能力&#xff0c;因此具有非常广泛的应用&#xff0c;如变化检测[1]、图像融合[2]、目标检测与识别[…

低代码——现代数字化人才培养的创新引擎

如今&#xff0c;随着数字时代的蓬勃发展&#xff0c;催生了各行各业数字化转型的浪潮。如果说技术是衍生数字时代的基石&#xff0c;那数字化人才一定是这场浪潮中不可或缺的推动力量。 随着新兴技术的不断创新和应用&#xff0c;全行业对于复合型、创新型的优秀数字化人才需…

stm32usart+中断接收定长数据

文章目录 前言一、cubemx的配置二、代码编写1.主函数在这里插入图片描述2. it.c 总结 前言 中断接收固定的数据值。 一、cubemx的配置 开启USART1 打开NVIC中断 二、代码编写 1.主函数 #define RxBuf_SIZE_1 50 //USART1接收缓冲区大小 #define MainBuf_SIZE_1 50 //USAR…