HarmonyOS 鸿蒙Next @Builder参数问题

发布于 1周前 作者 sinazl 来自 鸿蒙OS

HarmonyOS 鸿蒙Next @Builder参数问题

在使用Navigation的时候
  1. @Builder
  2. PagesMap(name: string) {
  3. if (name == ‘DialogPage’) {
  4. DialogPage()
  5. }
  6. }
  7. build() {
  8. Navigation(this.pageStack) {
  9. Button(‘Push DialogPage’)
  10. .margin(20)
  11. .width(‘80%’)
  12. .onClick(() => {
  13. this.pageStack.pushPathByName(‘DialogPage’, ‘’);
  14. })
  15. }
  16. .mode(NavigationMode.Stack)
  17. .title(‘Main’)
  18. .navDestination(this.PagesMap)
  19. }

在调用this.PagesMap的时候为啥可以不写参数,这个方法不是应该传参name吗,求各位大佬解惑一下

4 回复

 应该是组件内部通过

this.pageStack.pushPathByName('DialogPage', '');

这行代码获取的name

是的,可以这么写 @Builder contentBuilder() { Flex() } @BuilderParam content: () => void = this.contentBuilder;

为啥呢,这是ts特性吗,要是需要传参数咋传呢

关于HarmonyOS 鸿蒙Next中@Builder的参数问题,这里提供一些专业解答:

  1. 参数传递规则

    • @Builder修饰的函数参数传递有按值传递和按引用传递两种方式。
    • 参数类型必须与声明类型一致,不允许undefined、null或返回这些值的表达式。
    • @Builder函数内部,不允许改变参数值。
    • 仅当传入一个参数且为对象字面量时,才会按引用传递,其余方式均按值传递。
  2. 按引用传递的特殊情况

    • 若需在@Builder方法内调用自定义组件或其他@Builder方法,并希望参数按引用传递,HarmonyOS提供了$$作为传递参数的范式。
  3. 关于this指向

    • @Builder方法中,this通常指代当前所属组件,因此可以访问组件的状态变量。
    • 但要注意,在某些嵌套或复杂场景下,this的指向可能会发生变化,需特别小心处理。

如果在使用@Builder时遇到具体的参数问题,且上述解答无法直接解决,建议检查参数的类型、传递方式以及this的指向是否正确。如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html

回到顶部