harmony 鸿蒙NodeContainer
NodeContainer
基础组件,用于挂载自定义节点(如FrameNode或BuilderNode),并通过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)
}
}
你可能感兴趣的鸿蒙文章
0
赞
- 所属分类: 后端技术
- 本文标签:
热门推荐
-
2、 - 优质文章
-
3、 gate.io
-
8、 golang
-
9、 openharmony
-
10、 Vue中input框自动聚焦