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: 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通过NodeController挂载BuilderNode节点。 43 44```ts 45import { NodeController, BuilderNode, FrameNode, UIContext } from '@kit.ArkUI'; 46 47declare class Params { 48 text: string 49} 50 51@Builder 52function buttonBuilder(params: Params) { 53 Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.SpaceEvenly }) { 54 Text(params.text) 55 .fontSize(12) 56 Button(`This is a Button`, { type: ButtonType.Normal, stateEffect: true }) 57 .fontSize(12) 58 .borderRadius(8) 59 .backgroundColor(0x317aff) 60 } 61 .height(100) 62 .width(200) 63} 64 65class MyNodeController extends NodeController { 66 private rootNode: BuilderNode<[Params]> | null = null; 67 private wrapBuilder: WrappedBuilder<[Params]> = wrapBuilder(buttonBuilder); 68 69 makeNode(uiContext: UIContext): FrameNode | null { 70 if (this.rootNode === null) { 71 this.rootNode = new BuilderNode(uiContext); 72 this.rootNode.build(this.wrapBuilder, { text: "This is a Text" }) 73 } 74 return this.rootNode.getFrameNode(); 75 } 76} 77 78 79@Entry 80@Component 81struct Index { 82 private baseNode: MyNodeController = new MyNodeController() 83 84 build() { 85 Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Start, justifyContent: FlexAlign.SpaceEvenly }) { 86 Text("This is a NodeContainer contains a text and a button ") 87 .fontSize(9) 88 .fontColor(0xCCCCCC) 89 NodeContainer(this.baseNode) 90 .borderWidth(1) 91 .onClick(() => { 92 console.log("click event"); 93 }) 94 } 95 .padding({ left: 35, right: 35, top: 35 }) 96 .height(200) 97 .width(300) 98 } 99} 100``` 101