HarmonyOS4.0系统性深入开发11通过message事件刷新卡片内容

通过message事件刷新卡片内容

在卡片页面中可以通过postCardAction接口触发message事件拉起FormExtensionAbility,然后由FormExtensionAbility刷新卡片内容,下面是这种刷新方式的简单示例。

  • 在卡片页面通过注册Button的onClick点击事件回调,并在回调中调用

    postCardAction

    接口触发message事件拉起FormExtensionAbility。

    let storage = new LocalStorage();@Entry(storage)
    @Component
    struct WidgetCard {@LocalStorageProp('title') title: string = 'init';@LocalStorageProp('detail') detail: string = 'init';build() {Column() {Button('刷新').onClick(() => {postCardAction(this, {'action': 'message','params': {'msgTest': 'messageEvent'}});})Text(`${this.title}`)Text(`${this.detail}`)}.width('100%').height('100%')}
    }
    
  • 在FormExtensionAbility的onFormEvent生命周期中调用updateForm接口刷新卡片。

    import formBindingData from '@ohos.app.form.formBindingData';
    import FormExtensionAbility from '@ohos.app.form.FormExtensionAbility';
    import formProvider from '@ohos.app.form.formProvider';export default class EntryFormAbility extends FormExtensionAbility {onFormEvent(formId, message) {// Called when a specified message event defined by the form provider is triggered.console.info(`FormAbility onEvent, formId = ${formId}, message: ${JSON.stringify(message)}`);let formData = {'title': 'Title Update Success.', // 和卡片布局中对应'detail': 'Detail Update Success.', // 和卡片布局中对应};let formInfo = formBindingData.createFormBindingData(formData)formProvider.updateForm(formId, formInfo).then((data) => {console.info('FormAbility updateForm success.' + JSON.stringify(data));}).catch((error) => {console.error('FormAbility updateForm failed: ' + JSON.stringify(error));})}...
    }
    

    运行效果如下图所示。

    点击放大

通过router或call事件刷新卡片内容

在卡片页面中可以通过postCardAction接口触发router或call事件拉起UIAbility,然后由UIAbility刷新卡片内容,下面是这种刷新方式的简单示例。

通过router事件刷新卡片内容

  • 在卡片页面通过注册Button的onClick点击事件回调,并在回调中调用

    postCardAction

    接口触发router事件拉起UIAbility。

    let storage = new LocalStorage();@Entry(storage)
    @Component
    struct WidgetCard {@LocalStorageProp('detail') detail: string = 'init';build() {Column() {Button('跳转').margin('20%').onClick(() => {console.info('postCardAction to EntryAbility');postCardAction(this, {'action': 'router','abilityName': 'EntryAbility', // 只能跳转到当前应用下的UIAbility'params': {'detail': 'RouterFromCard'}});})Text(`${this.detail}`).margin('20%')}.width('100%').height('100%')}
    }
    
  • 在UIAbility的onCreate()或者onNewWant()生命周期中可以通过入参want获取卡片的formID和传递过来的参数信息,然后调用updateForm接口刷新卡片。

    import UIAbility from '@ohos.app.ability.UIAbility';
    import formBindingData from '@ohos.app.form.formBindingData';
    import formProvider from '@ohos.app.form.formProvider';
    import formInfo from '@ohos.app.form.formInfo';export default class EntryAbility extends UIAbility {// 如果UIAbility第一次启动,在收到Router事件后会触发onCreate生命周期回调onCreate(want, launchParam) {console.info('Want:' + JSON.stringify(want));if (want.parameters[formInfo.FormParam.IDENTITY_KEY] !== undefined) {let curFormId = want.parameters[formInfo.FormParam.IDENTITY_KEY];let message = JSON.parse(want.parameters.params).detail;console.info(`UpdateForm formId: ${curFormId}, message: ${message}`);let formData = {"detail": message + ': onCreate UIAbility.', // 和卡片布局中对应};let formMsg = formBindingData.createFormBindingData(formData)formProvider.updateForm(curFormId, formMsg).then((data) => {console.info('updateForm success.' + JSON.stringify(data));}).catch((error) => {console.error('updateForm failed:' + JSON.stringify(error));})}}// 如果UIAbility已在后台运行,在收到Router事件后会触发onNewWant生命周期回调onNewWant(want, launchParam) {console.info('onNewWant Want:' + JSON.stringify(want));if (want.parameters[formInfo.FormParam.IDENTITY_KEY] !== undefined) {let curFormId = want.parameters[formInfo.FormParam.IDENTITY_KEY];let message = JSON.parse(want.parameters.params).detail;console.info(`UpdateForm formId: ${curFormId}, message: ${message}`);let formData = {"detail": message + ': onNewWant UIAbility.', // 和卡片布局中对应};let formMsg = formBindingData.createFormBindingData(formData)formProvider.updateForm(curFormId, formMsg).then((data) => {console.info('updateForm success.' + JSON.stringify(data));}).catch((error) => {console.error('updateForm failed:' + JSON.stringify(error));})}}...
    }
    

通过call事件刷新卡片内容

  • 在使用

    postCardAction

    接口的call事件时,需要在FormExtensionAbility中的onAddForm生命周期回调中更新formId。

    import formBindingData from '@ohos.app.form.formBindingData'; 
    import FormExtensionAbility from '@ohos.app.form.FormExtensionAbility';export default class EntryFormAbility extends FormExtensionAbility {onAddForm(want) {let formId = want.parameters["ohos.extra.param.key.form_identity"];let dataObj1 = {"formId": formId};let obj1 = formBindingData.createFormBindingData(dataObj1);return obj1;}...
    };
    
  • 在卡片页面通过注册Button的onClick点击事件回调,并在回调中调用

    postCardAction

    接口触发call事件拉起UIAbility。

    let storage = new LocalStorage();@Entry(storage)
    @Component
    struct WidgetCard {@LocalStorageProp('detail') detail: string = 'init';@LocalStorageProp('formId') formId: string = '0';build() {Column() {Button('拉至后台').margin('20%').onClick(() => {console.info('postCardAction to EntryAbility');postCardAction(this, {'action': 'call','abilityName': 'EntryAbility', // 只能跳转到当前应用下的UIAbility'params': {'method': 'funA','formId': this.formId,'detail': 'CallFromCard'}});})Text(`${this.detail}`).margin('20%')}.width('100%').height('100%')}
    }
    
  • 在UIAbility的onCreate生命周期中监听call事件所需的方法,然后调用updateForm接口刷新卡片。

    import UIAbility from '@ohos.app.ability.UIAbility';
    import formBindingData from '@ohos.app.form.formBindingData';
    import formProvider from '@ohos.app.form.formProvider';
    import formInfo from '@ohos.app.form.formInfo';
    const MSG_SEND_METHOD: string = 'funA'// 在收到call事件后会触发callee监听的方法
    function FunACall(data) {// 获取call事件中传递的所有参数let params = JSON.parse(data.readString())if (params.formId !== undefined) {let curFormId = params.formId;let message = params.detail;console.info(`UpdateForm formId: ${curFormId}, message: ${message}`);let formData = {"detail": message};let formMsg = formBindingData.createFormBindingData(formData)formProvider.updateForm(curFormId, formMsg).then((data) => {console.info('updateForm success.' + JSON.stringify(data));}).catch((error) => {console.error('updateForm failed:' + JSON.stringify(error));})}return null;
    }
    export default class EntryAbility extends UIAbility {// 如果UIAbility第一次启动,call事件后会触发onCreate生命周期回调onCreate(want, launchParam) {console.info('Want:' + JSON.stringify(want));try {// 监听call事件所需的方法this.callee.on(MSG_SEND_METHOD, FunACall);} catch (error) {console.log(`${MSG_SEND_METHOD} register failed with error ${JSON.stringify(error)}`)}}...
    }
    

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

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

相关文章

按行依次处理数据的文件操作(C语言版)

按行依次处理数据的文件操作(C语言版) 这段代码的目的是处理多个文件,为每个文件创建一个新文件,将以 ‘r’ 开头的行添加 “./” 前缀,并将修改后的内容写入新文件。在main函数中,通过调用process函数,逐个处理了一系…

计算机网络——应用层与网络安全(六)

前言: 前几章我们已经对TCP/IP协议的下四层已经有了一个简单的认识与了解,下面让我们对它的最顶层,应用层进行一个简单的学习与认识,由于计算机网络多样的连接形式、不均匀的终端分布,以及网络的开放性和互联性等特征&…

使用ASP.NET MiniAPI 调试未匹配请求路径

本文将介绍如何在使用ASP.NET MiniAPI时调试未匹配到的请求路径。我们将详细讨论使用MapFallback方法、中间件等工具来解决此类问题。 1. 引言 ASP.NET MiniAPI是一个轻量级的Web API框架,它可以让我们快速地构建和部署RESTful服务。然而,在开发过程中如…

学习华为企业无线网络,有这篇文章就够了。

知识改变命运,技术就是要分享,有问题随时联系,免费答疑,欢迎联系! •以有线电缆或光纤作为传输介质的有线局域网应用广泛,但有线传输介质的铺设成本高,位置固定,移动性差。随着人们对…

固定本机在局域网中的 IP 地址

说明:以将 IP 地址固定为 192.168.1.107 为例 Step1、打开终端,输入以下命令查看网络信息: ipconfig -all 记住子网掩码、默认网关、DNS 服务器(首选和备用)信息,后面要用: Step2、进入 “控制…

分割数组的最大差值 - 华为OD统一考试

分割数组的最大差值 - 华为OD统一考试 OD统一考试 分值: 100分 题解: Java / Python / C 题目描述 给定一个由若干整数组成的数组nums ,可以在数组内的任意位置进行分割,将该数组分割成两个非空子数组(即左数组和右数组)&#xf…

小波理论与应用:理解小波

1 简介 来自源的信号通常处于时域。例如正弦信号、生物医学信号等。任何时域信号都可以使用数学变换进行处理或变换到频域(谱域)。傅里叶变换是一种流行或著名的变换,它将时域信号转换为频域信号,而不失一般性。 在绘制时域信号…

web:[BJDCTF2020]The mystery of ip(ssti模板注入、Smarty 模板引擎)

题目 进入页面显示如下 点击flag页面得到ip 点击hint页面 在hint.php的源代码页面中发现 由题目可以知道要从ip入手 这里尝试抓包加上X-Forwarded-For请求头修改为127.0.0.1 因为直接将127.0.0.1输出到页面,可以猜测是ssti模板注入 可以继续验证 这里发现输入什么…

动力学约束下的运动规划算法——Kinodynamic RRT*算法

一、RRT * 算法回顾 为了更好的理解Kinodynamic RRT*算法,我们先来回顾一下RRT * 算法 RRT * 先通过Sample函数随机选取一个点Xrand,然后通过Near函数找到当前树上距离Xrand最近的一个点Xnear,再通过Steer函数,沿着从Xnear到Xra…

pycharm python环境安装

目录 1.Python安装 2.PyQt5介绍 3.安装pyuic 4.启动designer.exe 5.pyinstaller(打包发布程序) 6.指定源安装 7.PyQt5-tools安装失败处理 8.控件介绍 9.错误记录 1.NameError: name reload is not defined 10.开发记录 重写报文输出和文件 ​编辑 1.Python安装 点…

Python使用selenium自动爬取苏宁易购商品数据

嗨喽~大家好呀,这里是魔王呐 ❤ ~! python更多源码/资料/解答/教程等 点击此处跳转文末名片免费获取 环境介绍: python 3.8 pycharm 专业版 selenium 谷歌浏览器 浏览器驱动 selenium: 人是怎么操作浏览器的 那么代码就怎么写 代码思路 开启一个浏览器 (谷歌…

基于JAVA的企业项目合同信息系统 开源项目

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 数据中心模块2.2 合同审批模块2.3 合同签订模块2.4 合同预警模块2.5 数据可视化模块 三、系统设计3.1 用例设计3.2 数据库设计3.2.1 合同审批表3.2.2 合同签订表3.2.3 合同预警表 四、系统展示五、核心代码5.1 查询合同…