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