HarmonyOS 鸿蒙Next 关于全局@builder装饰器的对象,无法正常导出给其他文件使用

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

HarmonyOS 鸿蒙Next 关于全局@builder装饰器的对象,无法正常导出给其他文件使用

有一个需求,需要使用到@builder,开发体验不是很流畅。

问题场景:

0.API9 deveco版本:

  1. 有三个按钮A、B、C。设置bindmenu属性,点击后,弹出指令菜单。单个按钮的菜单,两两部分重叠。

  2. 想通过在一个单独的文件中,把有重叠的指令,独立成一个@builder导出,然后在目标UI文件中import使用,以实现指令复用,避免每个指令在三个按钮的菜单中重复定义。

出现问题:

  1. 定义在全局的@builder无法被用做属性设置,不能在bindmenu的属性中引用xiugai() 对象(这样说可能不准确,只是代码提示选项框不会提示)。

  2. 经过测试,发现其实是可以导出使用的。在其他文件引入后,在属性设置时,代码提示选项框不会提示,但是可以手动输入,通过模拟器测试,功能正常。真机未测试。

  3. 但是不能定义在namespace中,这样在使用时就必须得每个builder对象都在import中输入一次,如果重名了,还得改名字,有时候挺麻烦的。

关于@builder装饰的对象被引用这个需求,个人感觉越复杂、越大型的应用开发中,越是需求。为了给用户提供便捷体验,很多指令需要重复出现,但是不在同一个页面中。例如退出功能,可能在任何地方都要求可以快速点击退出,退出功能对这个需求还不是很强烈。

但是当有非常多的指令(例如100个),并且在每个地方都只是成套出现其中一些指令(文本编辑:修改、复制、另存,移动:移动到集合a、移动到集合b、移动到集合c,等等),就很需要了。这样就可以在一个builder文件中,系统的实现指令,然后成套的指令单独写成一个@builder对象中,这样就可以在需要这一套指令的地方引用。也方便后期修改,比如需要删除某套指令中的一个时,只需要在那个builder文件中,修改这套指令对应的@builder对象即可,不然得在每个使用这套指令的地方去修改,可能还会出现地方没找全,漏改这种情况,导致软件发布后才发现,然后反复更新软件。

还有个情况,感觉似乎很多装饰器装饰的对象都不能导出使用,例如@extends@style。struct关键字对象可以导出,但是只能作为组件,并且内部对象无法在外部使用。

还想请教下,导出的@builder在真机上能否正常交互,我的真机太卡,无法测试。


更多关于HarmonyOS 鸿蒙Next 关于全局@builder装饰器的对象,无法正常导出给其他文件使用的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html

5 回复

还想请教下,export @builder后,使用了导出的@builder对象在真机能否正常交互。

更多关于HarmonyOS 鸿蒙Next 关于全局@builder装饰器的对象,无法正常导出给其他文件使用的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


  1. 输出文件: @Builder export function name() {...}
  2. 导入文件:import {name} from '...' 实测真机可用
  3. 关于智能提示问题,估计导入只是名字,没有类型信息,因此在预期CustomBuilder的位置无法智能提示,可提单建议IDE改进;

收到,非常感谢帮忙测试。

在HarmonyOS中,@builder装饰器用于定义UI组件的构建函数。如果你遇到@builder装饰的对象无法正常导出给其他文件使用的问题,可能是由于以下几种原因:

  1. 作用域问题@builder装饰的函数或对象可能未正确导出或导入。确保在导出文件中使用export关键字,在导入文件中使用import关键字。

  2. 模块解析问题:检查模块路径是否正确,确保导出的模块路径与导入的模块路径一致。

  3. 类型声明问题:如果使用了TypeScript或类似的语言,检查类型声明是否正确,确保导出的类型与导入的类型一致。

  4. 编译问题:在某些情况下,编译工具可能未正确处理@builder装饰器的导出。检查编译配置,确保编译工具支持@builder装饰器的导出。

确保导出的@builder对象在导入文件中能够正常使用,检查上述问题并逐一排除。

在HarmonyOS鸿蒙Next中,使用@builder装饰器定义的对象默认是模块私有的,无法直接导出给其他文件使用。要解决这个问题,可以通过以下步骤实现:

  1. 定义Builder函数:在源文件中使用@builder装饰器定义Builder函数。
  2. 导出Builder函数:使用export关键字将Builder函数导出。
  3. 导入Builder函数:在目标文件中使用import语句导入Builder函数。

示例代码:

// 源文件: builder.ts
@builder
export function myBuilder() {
  // Builder逻辑
}

// 目标文件: main.ts
import { myBuilder } from './builder';

// 使用myBuilder
myBuilder();

通过这种方式,可以确保@builder装饰器的对象能够正常导出并在其他文件中使用。

回到顶部
AI 助手
你好,我是IT营的 AI 助手
您可以尝试点击下方的快捷入口开启体验!