bixi
Version:
企业级中后台前端解决方案
94 lines (72 loc) • 2.25 kB
Markdown
type: Guide
title:
en-US: Design
zh-CN: 设计思路
order: 10
<img height="500px" src="./assets/img/infra.jpeg"/>
#### `Label Engine`
标注引擎(通过 iframe 引入), 只负责单纯做两件的事:
1. 标注图层的渲染
2. 标注事件的监听
#### `Label Hub`
在使用标注器组件时候你需要先实例化一个标注控制器,然后将其传入标注组件,之后标注的所有事件都将会被它所接管,就像这样
``` typescript
import { LabelHub } from '@bixi/label';
@Component({
template: `
<bixi-label-core
engine="./source/index.html"
[hub]="hub">
</bixi-label-core>`
})
export class LabelHubDemoComponent{
hub = new LabelHub({
dev: true,
});
}
```
对于业务组件而言, `LabelHub` 就像是一个邮局,它可以告诉你有哪些事件发生,也允许你主动往它上面投递事件等待引擎处理,比如
```typescript
export class LabelHubDemoComponent{
hub = new LabelHub({
dev: true,
});
ngOnInit() {
this.hub.pagination$.subscribe(({ pageNumber }) => {
console.warn('内部更改了页码', pageNumber);
})
}
pageChange() {
// 业务组件主动更改页码
this.hub.setPagination({
pageNumber: 2
});
}
}
```
`LabelHub` 对修改是封闭的,但是对扩展是完全开放的,我们将核心数据都实现了成员保护,只有当你需要完全定制 Hub 的时候,你可以继承它然后扩展它,就像下面这样可以实现 Hook 的功能
``` typescript
import { LabelHub } from '@bixi/label';
export class MyHub extends LabelHub {
constructor(options) {
super(options);
}
setZoom(zoom) {
console.warn('set zoom1', zoom);
this._api.setZoom(zoom);
console.warn('set zoom2', zoom);
}
}
```
但如果像上面这样仅仅是打印日志的话,那么你可以不必这么舍近求远,我们提供了开发模式,丰富的日志可以帮助你快速排查问题,而它仅需要一行配置
``` typescript
hub = new LabelHub({
dev: true
});
```
<img height="360px" src="./assets/img/label-dev.jpg"/>
[查看更多](/label/label-hub/zh)
#### `<bixi-label-core />`
这是标注引擎的 Angular 封装,同时支持文本和表格标注