arkui-x 页面封装为自定义组件,巧用controller

news/2025/2/2 9:08:59/

鸿蒙开发中,有时会需要将某些页面封装为自定义组件,方便复用。

页面的入口为:

@Entry
@Componentstruct XXX {
。。。。。。

自定义组件的入口为:

@Component
export struct XXXX {
。。。。。。

但是页面与自定义组件在生命周期上是有一些不同的。

重点在于页面支持onPageShow():在页面每次显示时调用‌。通常页面数据需要在这个接口里刷新,以保证数据最新。

而自定义组件不支持onPageShow()接口,只有aboutToAppear()接口,用于组件初始化数据。

所以把页面封装为自定义组件,遇到的最大问题就是数据刷新问题。

解决思路:自定义组件自己无法刷新,就让调用方来刷新数据。换一个说法就是,要支持父组件调用子组件接口。

arkui-x框架给了一个方案,就是定义controller接口。示例如下:

封装的自定义组件NewSon,定义class NewSonController的接口定义,NewSon组件初始化时给refreshData函数接口赋值。这个写法有点像AIDL。

export class NewSonController {refreshData = () => {}
}@Component
export struct NewSon {controller: NewSonController = new NewSonController();refreshData = () => {this.uptData()}aboutToAppear() {if (this.controller) { //给controller对应的方法赋值this.controller.refreshData = this.refreshData;}}。。。。。。build() {
。。。。。。

父组件增加下面定义,与调用点:

@Entry
@Component
struct FartherPage {
。。。。。。childRef = new NewSonController(); // Controller接口,获取子组件刷新数据的接口的引用onPageShow() {
。。。。。。this.childRef.refreshData()   // 每次页面显示时,刷新子组件数据}
。。。。。。build() {
。。。。。。NewSon({ controller: this.childRef })
。。。。。。}

这里父组件是一个页面,调用NewSon组件时,传入了this.childRef作为controller。然后可在onPageShow里调用this.childRef.refreshData,间接达到刷新子组件数据的效果。


http://www.ppmy.cn/news/1568656.html

相关文章

Python-基于PyQt5,pdf2docx,pathlib的PDF转Word工具

前言:日常生活中,我们常常会跟WPS Office打交道。作表格,写报告,写PPT......可以说,我们的生活已经离不开WPS Office了。与此同时,我们在这个过程中也会遇到各种各样的技术阻碍,例如部分软件的PDF转Word需要收取额外费用等。那么,可不可以自己开发一个小工具来实现PDF转…

Python NumPy(6):修改数组形状、翻转数组、修改数组维度

1 修改数组形状 函数描述reshape不改变数据的条件下修改形状flat数组元素迭代器flatten返回一份数组拷贝,对拷贝所做的修改不会影响原始数组ravel返回展开数组 1.1 numpy.reshape numpy.reshape 函数可以在不改变数据的条件下修改形状,格式如下&#x…

【C++】string类使用详解

目录 💕1.string类 💕3. String基本功能(1)(2)讲解 💕4.sting类基本功能(3) 讲解 💕5.string类基本功能(4) (拷贝构造函数) &#x1…

android 圆形弹窗摄像头开发踩坑——源码————未来之窗跨平台操作

一、飘窗刷脸&#xff0c;拍照采用飘窗 刷脸认证安卓接口采用飘窗具有在不干扰用户主要操作的前提下以醒目方式引导用户完成认证&#xff0c;且能灵活定制样式以提升用户体验和认证效率的优点 二、踩坑只有一个扇形 <?xml version"1.0" encoding"utf-8&quo…

第27篇:Python开发进阶:python多线程与多进程编程

第27篇&#xff1a;多线程与多进程编程 目录 并发编程概述 什么是并发编程多线程与多进程的区别 多线程编程 线程的基本概念创建和管理线程线程同步与锁 多进程编程 进程的基本概念创建和管理进程进程间通信 线程与进程的比较全局解释器锁&#xff08;GIL&#xff09; GIL的影…

【MySQL】数据类型与表约束

目录 数据类型分类 数值类型 tinyint类型 bit类型 小数类型 字符串类型 日期和时间类型 enum和set 表的约束 空属性 默认值 列描述 zerofill 主键 自增长 唯一键 外键 数据类型分类 数值类型 tinyint类型 MySQL中&#xff0c;整形可以是有符号和无符号的&…

pytorch实现门控循环单元 (GRU)

人工智能例子汇总&#xff1a;AI常见的算法和例子-CSDN博客 特性GRULSTM计算效率更快&#xff0c;参数更少相对较慢&#xff0c;参数更多结构复杂度只有两个门&#xff08;更新门和重置门&#xff09;三个门&#xff08;输入门、遗忘门、输出门&#xff09;处理长时依赖一般适…

【机器学习理论】生成模型和判别模型

生成模型和判别模型是机器学习中两种不同的建模方式。生成模型关注的是联合概率分布 P ( X , Y ) P(X, Y) P(X,Y)&#xff0c;即同时考虑数据 X X X和标签 Y Y Y的关系&#xff1b;判别模型则直接学习条件概率 P ( Y ∣ X ) P(Y|X) P(Y∣X)或决策边界。 生成模型 生成模型的目…