当前位置: 首页 > article >正文

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

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

页面的入口为:

@Entry
@Component

struct 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.kler.cn/a/528926.html

相关文章:

  • Python 梯度下降法(五):Adam Optimize
  • 16.[前端开发]Day16-HTML+CSS阶段练习(网易云音乐五)
  • 汽车中控屏HMI界面,安全和便捷是设计的两大准则。
  • https的原理
  • 基础项目实战——学生管理系统(c++)
  • C++ Primer 自定义数据结构
  • Spring的AOP思想中事物管理注意点
  • 基础数据类型之整形
  • (leetcode 213 打家劫舍ii)
  • Games104——游戏引擎Gameplay玩法系统:基础AI
  • 从0开始使用面对对象C语言搭建一个基于OLED的图形显示框架(动态菜单组件实现)
  • Dijkstra算法解析
  • 读书笔记-《Redis设计与实现》(一)数据结构与对象(下)
  • 课题介绍:水下惯性/地形组合导航精度提升的理论与方法研究
  • oracle: 多表查询之联合查询[交集intersect, 并集union,差集minus]
  • 环形缓冲区原理与C语言实现ringbuffer
  • 计算满足特定条件的素数在全体素数中的密度极限值,并将该极限值乘以10^7后向下取整的解题思路
  • Python3 【装饰器】项目实战:5个新颖的学习案例
  • 说说Redis的内存淘汰策略?
  • TVM调度原语完全指南:从入门到微架构级优化
  • 【Rust自学】18.3. 模式(匹配)的语法
  • 【漫话机器学习系列】073.黑塞矩阵(Hessian Matrix)
  • python算法和数据结构刷题[4]:查找算法和排序算法
  • Versal - 基础4(VD100+Versal IBERT)
  • C++解决输入空格字符串的三种方法
  • 智慧园区管理系统推动企业智能运维与资源优化的全新路径分析