动态加载组件的封装使用

import { BuilderNode, NodeController } from "@kit.ArkUI";
import { OneclickParams } from "../openDialog/PromptActionClassUtils";


export class AddStructNodeUtil extends NodeController  {
  private rootNode: BuilderNode<[OneclickParams]> | null = null;
  private param:OneclickParams|null = null
   private wrapBuilder: WrappedBuilder<[OneclickParams]> | null  = null
  constructor(buildText : WrappedBuilder<[OneclickParams]>,param:OneclickParams) {
    super();
    this.wrapBuilder = buildText
    this.param = param
  }
  makeNode(uiContext: UIContext): FrameNode | null {
    this.rootNode = new BuilderNode(uiContext);
    this.rootNode.build(this.wrapBuilder, this.param)
    return this.rootNode.getFrameNode();
  }
}

看起来挺简单的吧
用的时候如下

  private mainMapController: AddStructNodeUtil = new AddStructNodeUtil(wrapBuilder(mainMapLayout), new OneclickParams(
    '', (value) => {
  
  }))

熟悉我前面PromptActionClassUtils 文章的,看这调用代码,就是一个布局加一个回调
mainMapLayout 加载的组件,OneclickParams是一个自定义的回调参数

//点击回调的参数
export class OneclickParams  {
  content: string = ""
  sureOnclick:(value:string) =>void= () => {}
  constructor(content: string,sureOnclick:(value:string) =>void= () => {}) {
    this.content = content;
    this.sureOnclick = sureOnclick
  }
}

下面的是显示的代码,我第一次看的时候,也觉得这。。。也太简单了吧,会不会有问题,然后尝试了别的方法看看能不能更优雅,,结果还是听人劝,吃饱饭。

   if (this.mainMapShow) {
          NodeContainer(this.mainMapController)
            .width('100%')
            .height('100%')
        }```

结束了,好像也怎么封装,对了,也就把布局外调了,用的时候不用再自己写一个方法弄进来了,比较敷衍了,这次
Logo

讨论HarmonyOS开发技术,专注于API与组件、DevEco Studio、测试、元服务和应用上架分发等。

更多推荐