harmony 鸿蒙NodeContainer

  • 2025-06-12
  • 浏览 (3)

NodeContainer

基础组件,用于挂载自定义节点(如FrameNodeBuilderNode),并通过NodeController动态控制节点的上树和下树。不支持尾随添加子节点。组件接受一个NodeController的实例接口。需要NodeController组合使用。

说明:

该组件从API version 11开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。

该组件下仅支持挂载自定义节点FrameNode或者是BuilderNode中获取的根节点FrameNode。 不支持挂载查询获得的系统组件代理节点

当前不支持使用动态属性设置

该组件下的节点树构建中会使用UI实例UIContext,当实例切换时可能会因为实例不匹配而出现问题,因此该组件当前不支持跨实例的节点复用。

该组件未销毁时,不会主动触发挂载节点的下树。

子组件

不支持子组件。

接口

NodeContainer

NodeContainer(controller: NodeController)

原子化服务API: 从API version 12开始,该接口支持在原子化服务中使用。

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

参数:

参数名 类型 必填 说明
controller NodeController NodeController用于控制NodeContainer中的节点的上树和下树,反映NodeContainer容器的生命周期。

属性

支持通用属性

事件

支持通用事件

示例

通过NodeController挂载BuilderNode节点。

import { NodeController, BuilderNode, FrameNode, UIContext } from '@kit.ArkUI';

declare class Params {
  text: string
}

@Builder
function buttonBuilder(params: Params) {
  Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.SpaceEvenly }) {
    Text(params.text)
      .fontSize(12)
    Button(`This is a Button`, { type: ButtonType.Normal, stateEffect: true })
      .fontSize(12)
      .borderRadius(8)
      .backgroundColor(0x317aff)
  }
  .height(100)
  .width(200)
}

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

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


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

  build() {
    Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Start, justifyContent: FlexAlign.SpaceEvenly }) {
      Text("This is a NodeContainer contains a text and a button ")
        .fontSize(9)
        .fontColor(0xCCCCCC)
      NodeContainer(this.baseNode)
        .borderWidth(1)
        .onClick(() => {
          console.log("click event");
        })
    }
    .padding({ left: 35, right: 35, top: 35 })
    .height(200)
    .width(300)
  }
}

patternlock

你可能感兴趣的鸿蒙文章

harmony 鸿蒙图像AI分析错误码

harmony 鸿蒙ArcButton

harmony 鸿蒙ArcSlider

harmony 鸿蒙Chip

harmony 鸿蒙ChipGroup

harmony 鸿蒙ComposeListItem

harmony 鸿蒙ComposeTitleBar

harmony 鸿蒙advanced.Counter

harmony 鸿蒙弹出框 (Dialog)

harmony 鸿蒙DialogV2

0  赞