【HarmonyOS NEXT】鸿蒙如何动态添加组件(NodeController)

news/2024/7/8 3:11:35 标签: harmonyos, 华为

NodeController用于实现自定义节点的创建、显示、更新等操作的管理,并负责将自定义节点挂载到NodeContainer上。

说明

本模块首批接口从API version 11开始支持

当前不支持在预览器中使用NodeController。

导入模块

import { NodeController } from "@ohos.arkui.node";

NodeController

通常搭配NodeContainer进行使用。用于创建控制器管理绑定的NodeContainer组件。一个NodeController只允许与一个NodeContainer进行绑定。

系统能力: SystemCapability.ArkUI.ArkUI.Full

makeNode

abstract makeNode(uiContext : UIContext): FrameNode | null

当实例绑定的NodeContainer创建的时候进行回调。回调方法将返回一个节点,将该节点挂载至NodeContainer。

或者可以通过NodeController的rebuild()方法进行回调的触发。

系统能力: SystemCapability.ArkUI.ArkUI.Full

参数:

参数名

类型

必填

说明

uiContext

UIContext

回调该方法时候,绑定NodeContainer的UI上下文。

返回值:

类型

说明

FrameNode| null

一个FrameNode对象,返回的节点将被挂载至NodeContainer的占位节点上。若返回null对象,将清空对应NodeContainer的子节点。

aboutToAppear

aboutToAppear?(): void

当NodeController绑定的NodeContainer挂载显示时触发此回调。

系统能力: SystemCapability.ArkUI.ArkUI.Full

aboutToDisappear

aboutToDisappear?(): void

当NodeController绑定的NodeContainer卸载消失时触发此回调。

系统能力: SystemCapability.ArkUI.ArkUI.Full

aboutToResize

aboutToResize?(size: Size): void

当NodeController绑定的NodeContainer布局的时候触发此回调。

系统能力: SystemCapability.ArkUI.ArkUI.Full

参数:

参数名

类型

必填

说明

size

Size

用于返回组件布局大小的宽和高,单位为vp。

onTouchEvent

onTouchEvent?(event: TouchEvent): void

当NodeController绑定的NodeContainer收到Touch事件时触发此回调。

系统能力: SystemCapability.ArkUI.ArkUI.Full

参数:

参数名

类型

必填

说明

event

TouchEvent

触摸事件。

rebuild

rebuild(): void

调用此接口通知NodeContainer组件重新回调makeNode方法,更改子节点。

系统能力: SystemCapability.ArkUI.ArkUI.Full

示例

import { UIContext } from '@ohos.arkui.UIContext';
import { NodeController, BuilderNode, Size, FrameNode } from '@ohos.arkui.node';

class Params {
  text: string = "this is a text"
}

@Builder
function buttonBuilder(params: Params) {
  Column() {
    Button(params.text)
      .fontSize(12)
      .borderRadius(8)
      .borderWidth(2)
      .backgroundColor(Color.Orange)
  }
}

class MyNodeController extends NodeController {
  private buttonNode: BuilderNode<[Params]> | null = null;
  private wrapBuilder: WrappedBuilder<[Params]> = wrapBuilder(buttonBuilder);

  makeNode(uiContext: UIContext): FrameNode {
    if (this.buttonNode == null) {
      this.buttonNode = new BuilderNode(uiContext);
      this.buttonNode.build(this.wrapBuilder, { text: "This is a Button" })
    }
    return this.buttonNode!.getFrameNode()!;
  }

  aboutToResize(size: Size) {
    console.log("aboutToResize width : " + size.width + " height : " + size.height)
  }

  aboutToAppear() {
    console.log("aboutToAppear")
  }

  aboutToDisappear() {
    console.log("aboutToDisappear");
  }

  onTouchEvent(event:TouchEvent) {
    console.log("onTouchEvent");
  }
}

@Entry
@Component
struct Index {
  private myNodeController: MyNodeController = new MyNodeController();

  build() {
    Column() {
      NodeContainer(this.myNodeController)
    }
    .padding({ left: 35, right: 35, top: 35 })
    .width("100%")
    .height("100%")
  }
}


http://www.niftyadmin.cn/n/5536436.html

相关文章

LeetCode热题100刷题6:160. 相交链表、206. 反转链表、234. 回文链表、141. 环形链表、142. 环形链表 II

160. 相交链表 /*** Definition for singly-linked list.* struct ListNode {* int val;* ListNode *next;* ListNode(int x) : val(x), next(NULL) {}* };*/ class Solution { public:ListNode *getIntersectionNode(ListNode *headA, ListNode *headB) {ListNode…

JVM的五大内存区域

JVM的五大内存区域 JVM内存区域最粗略的划分可以分为 堆 和 栈 &#xff0c;当然&#xff0c;按照虚拟机规范&#xff0c;可以划分为以下几个区域&#xff1a; JVM内存分为线程独享区和线程共享区&#xff0c; 其中 方法区 和 堆 是线程共享区&#xff0c; 虚拟机栈, 本地方法…

SQL中使用NEXTVAL获取序列值

SQL中使用NEXTVAL获取序列值 大家好&#xff0c;我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编&#xff0c;也是冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01; 在关系型数据库中&#xff0c;序列&#xff08;Sequence&#xff09;是一种对象&a…

Word使用中的一些烦人的小问题

文章目录 前言一、表格满一页后再插入行无法显示二、文字显示半截 前言 使用word的时候有一些莫名其妙的情况出现&#xff0c;想问度娘还很难用文字来描述问题&#xff0c;随时记录一下方便以后看 一、表格满一页后再插入行无法显示 点击表格左上方的全选按钮&#xff0c;下一…

【数智化人物展】数势科技创始人兼CEO黎科峰:数智化时代To B软件行业面临颠覆与重塑...

黎科峰 本文由数势科技创始人兼CEO黎科峰投递并参与由数据猿联合上海大数据联盟共同推出的《2024中国数智化转型升级先锋人物》榜单/奖项评选。 大数据产业创新服务媒体 ——聚焦数据 改变商业 2020年&#xff0c;对我而言&#xff0c;是职业生涯中的一个重大转折点。在全球新…

uniapp使用 movable-area movable-view 实现按双指中心位置缩放及拖拽功能

原理 使用 transformOrigin: ${state.x}px ${state.y}px 0 重新设置偏移中心点 待解决问题 缩放后进行拖拽会使计算的中心点位置与双指中心位置存在偏差&#xff0c;如果网友有解决这个问题&#xff0c;请贴代码到我的评论区&#xff0c;谢谢。 直接贴出代码 这里有关pdf的…

web前端主要包括哪些技术

Web前端开发作为前端技术的重要组成&#xff0c;一直占据着重要的地位&#xff0c;整个IT行业内有大量的前端开发从业者&#xff0c;随着移动互联网、大数据和人工智能的发展&#xff0c;目前前端的知识体系也在逐渐丰富。 熟悉Web前端工作的小伙伴都知道Web中有很多的技术&am…

期货量化交易:探索金融投资的新领域

在当今快速发展的金融市场中&#xff0c;期货量化交易作为一种新兴的投资策略&#xff0c;正逐渐受到投资者的关注。本文将深入探讨期货量化交易的概念、优势、风险以及其在现代投资组合中的作用&#xff0c;旨在为广大读者提供一个全面而深入的视角。 期货市场概览 期货市场…