宿主环境的兼容
鸿蒙系统提供了自定义组件的能力,@Component装饰器仅能装饰struct关键字声明的数据结构。struct被@Component装饰后具备组件化的能力,从API version 9开始,该装饰器支持在ArkTS卡片中使用。(https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V14/arkts-create-custom-components-V14#component)。
组件声明
- 为了保证鸿蒙环境中的 VChart 能力,鸿蒙环境中对原生的Canvas进行了封装,使其具备浏览器Canvas2D的接口
- harmony 环境的组件封装逻辑在
packages/harmony_vchart/library/src/main/ets/ChartComponent.ets目录中,包含基于harmony环境封装的组件。
- 对鸿蒙的事件进行了二次封装,使其和浏览器的事件接口兼容
export class HTMLTouchEvent { type: string = ''; touches: TouchItem[] = []; changedTouches: TouchItem[] = []; target: Object | null = null; constructor(harmonyTouchEvent: TouchEvent) { if (harmonyTouchEvent.type === TouchType.Down) { this.type = 'touchstart'; } else if (harmonyTouchEvent.type === TouchType.Up || harmonyTouchEvent.type === TouchType.Cancel) { this.type = 'touchend'; } else if (harmonyTouchEvent.type === TouchType.Move) { this.type = 'touchmove'; } this.touches = harmonyTouchEvent.touches.map(t => new TouchItem(t)); this.changedTouches = harmonyTouchEvent.touches.map(t => new TouchItem(t)); } }
- 事件兼容逻辑在
packages/harmony_vchart/library/src/main/ets/event.ets目录中。
- 由于鸿蒙环境中没有浏览器的RequestAnimationFrame接口,所以基于鸿蒙自己的动画API,实现了自定义的Ticker:HarmonyTickHandler。
- 动画Ticker逻辑在
packages/harmony_vchart/library/src/main/ets/ticker.ets目录中。
组件注册
组件的注册包含属性以及必要的声明周期。
组件属性:
-
spec:与 VChart 的 spec 配置相同
-
initOption:与 VChart 的 initOption 配置相同;
组件方法:
-
onChartInitCb: 提供了初始化完成的回调
-
onChartReadyCb: 提供了图表完成创建准备绘制的回调