1# NodeContainer 2 3基础组件,不支持尾随添加子节点。组件接受一个[NodeController](../js-apis-arkui-nodeController.md)的实例接口。需要NodeController组合使用。 4 5> **说明:** 6> 7> 该组件从API Version 11开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。 8 9## 子组件 10 11不支持子组件。 12 13## 接口 14 15### NodeContainer 16 17NodeContainer(controller: import('../api/@ohos.arkui.node').NodeController) 18 19**参数:** 20 21| 参数名 | 参数类型 | 必填 | 参数描述 | 22| ---------- | ---------------------------------------------------- | ---- | ------------------------------------------------------------ | 23| controller | [NodeController](../js-apis-arkui-nodeController.md) | 是 | NodeController用于控制NodeContainer中的节点的上树和下树,反映NodeContainer容器的生命周期。 | 24 25## 属性 26 27支持[通用属性](ts-universal-attributes-size.md) 28 29## 事件 30 31支持[通用事件](ts-universal-events-click.md)。 32 33## 示例 34 35```ts 36import { UIContext } from '@ohos.arkui.UIContext'; 37import { NodeController, BuilderNode, FrameNode } from '@ohos.arkui.node'; 38 39 40declare class Params { 41 text: string 42} 43 44@Builder 45function buttonBuilder(params: Params) { 46 Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.SpaceEvenly }) { 47 Text(params.text) 48 .fontSize(12) 49 Button(`This is a Button`, { type: ButtonType.Normal, stateEffect: true }) 50 .fontSize(12) 51 .borderRadius(8) 52 .backgroundColor(0x317aff) 53 } 54 .height(100) 55 .width(200) 56} 57 58class MyNodeController extends NodeController { 59 private rootNode: BuilderNode<[Params]> | null = null; 60 private wrapBuilder: WrappedBuilder<[Params]> = wrapBuilder(buttonBuilder); 61 62 makeNode(uiContext: UIContext): FrameNode | null { 63 if (this.rootNode === null) { 64 this.rootNode = new BuilderNode(uiContext); 65 this.rootNode.build(this.wrapBuilder, { text: "This is a Text" }) 66 } 67 return this.rootNode.getFrameNode(); 68 } 69} 70 71 72@Entry 73@Component 74struct Index { 75 private baseNode: MyNodeController = new MyNodeController() 76 77 build() { 78 Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Start, justifyContent: FlexAlign.SpaceEvenly }) { 79 Text("This is a NodeContainer contains a text and a button ") 80 .fontSize(9) 81 .fontColor(0xCCCCCC) 82 NodeContainer(this.baseNode) 83 .borderWidth(1) 84 .onClick(() => { 85 console.log("click event"); 86 }) 87 } 88 .padding({ left: 35, right: 35, top: 35 }) 89 .height(200) 90 .width(300) 91 } 92} 93``` 94![patternlock](figures/nodeContainer_sample.jpg)