@bixi/label-angular v10.0.0-rc7.3
1. 安装使用
安装依赖
yarn add @bixi/label-angular
修改 angular.json
{
"architect": {
"build": {
"options": {
"assets": [
{
"glob": "**/*",
"input": "node_modules/@bixi/label-angular/engine",
"output": "/bixi-label-engine"
}
]
}
}
}
}
模块注册
import { BixiLabelModule } from '@bixi/label-angular';
@NgModule({
imports: [
BixiLabelModule,
]
})
export class SharedModule { }
2. 设计理念
Label Engine
标注引擎(通过 iframe 引入), 只负责单纯做两件事:
- 标注图层的渲染
- 标注事件的监听
LabelTextHub 和 LabelTableHub
在使用标注器组件时候你需要先实例化一个标注控制器,然后将其传入标注组件,之后标注的所有事件都将会被它所接管,以文本标注为例
import { LabelTextHub } from '@bixi/label-angular';
@Component({
template: `
<bixi-label-text
engine="./bixi-label-engine/index.html"
[hub]="hub">
</bixi-label-text>`
})
export class LabelHubDemoComponent{
hub = new LabelTextHub({
dev: true,
});
}
对于业务组件而言, LabelTextHub
就像是一个邮局,它可以告诉你有哪些事件发生,也允许你主动往它上面投递事件等待引擎处理,比如
export class LabelHubDemoComponent{
hub = new LabelHub({
dev: true,
});
ngOnInit() {
this.hub.pagination$
.subscribe(({ pageNumber }) => {
console.warn('内部更改了页码', pageNumber);
});
}
pageChange() {
// 业务组件主动更改页码
this.hub.setPageNumber(2);
}
}
LabelTextHub
对修改是封闭的,但是对扩展是完全开放的,我们将核心数据都实现了成员保护,只有当你需要完全定制 Hub 的时候,你可以继承它然后扩展它,就像下面这样可以实现 Hook 的功能
import { LabelTextHub } from '@bixi/label-angular';
export class MyHub extends LabelTextHub {
constructor(options) {
super(options);
}
setZoom(zoom) {
console.warn('set zoom1', zoom);
this._api.setZoom(zoom);
console.warn('set zoom2', zoom);
}
}
但如果像上面这样仅仅是打印日志的话,那么你可以不必这么舍近求远,我们提供了开发模式,丰富的日志可以帮助你快速排查问题,而它仅需要一行配置
hub = new LabelTextHub({
dev: true
});
3. 使用细节
3.0 文本和表格通用 API
首先我们需要知道,不管是 LabelTextHub
还是 LabelTableHub
,实际上都是继承自 LabelHub
,以下是通用的 API
LabelHub
构造参数
名称 | 类型 | 描述 |
---|---|---|
dev | boolean | 开启开发模式,将会打印所有 hub 的核心方法执行过程,以及执行时间 |
logUnhandledEvents | boolean | 打印未处理事件 |
logAllEvents | boolean | 打印所有日志 |
logIgnoreEvents | string[] | 忽略的事件 |
成员属性
名称 | 类型 | 描述 |
---|---|---|
ready$ | BehaviorSubject<boolean> | 在标注引擎准备好标注的准备工作后触发 |
searchResult$ | BehaviorSubject<ISearchResult> | 搜索结果 |
pagination$ | BehaviorSubject<IPagination> | 页码 |
pageNumber$ | BehaviorSubject<number> | 当前页码 |
pageCount$ | Subject<number> | 总页码 |
zoom$ | BehaviorSubject<number> | 缩放比 |
loaded | boolean | 引擎加载完成 |
ready | boolean | 引擎准备完备 |
api | 引擎 API(不建议直接操作) |
成员方法
名称 | 类型 | 描述 |
---|---|---|
setPagination | (pagination: IPagination)=> void | 修改页码 |
setZoom | (zoom: number) => void | 修改缩放比 |
search | (params: ISearchParams) => void | 搜索 |
getViewport | () => IViewPort[] | 获取页面的显示相关信息 |
destroy | () => void | 销毁控制器 |
3.1 文本标注
LabelTextHub
成员方法
名称 | 类型 | 描述 |
---|---|---|
init | (options: IInitOptions) => void | 初始化标注器 |
patch | (options: Partial<IInitOptions>) => void | 更新标注器 |
setLabels | (labels: ILabel[]) => void | 设置标注列表 |
getSelectedLabels | () => []ILabel | 获取选中的标注列表 |
getLabels | () => []ILabel | 获取标注列表 |
search | (params: ISearchParams) => void | 搜索 |
scrollToLabelByUuid | (params: IScrollToLabelLabelByUuidParams) => void | 通过uuid滚动到某个标注 |
scrollToLabelByIndex | (params: IScrollToLabelByIndexParams) => void | 通过索引跳转到某个标注 |
scrollToTableCell | (params: IScrollToTableCellsParams) => void | 通过坐标跳转到某个单元格 |
restore | () => void | 丢掉临时标注重新渲染 |
bixi-label-text
成员 | 说明 | 类型 | 默认值 |
---|---|---|---|
[engine] | 标注引擎地址 | string | ./bixi-label/index.html |
[hub] | 标注器控制器 | LabelHub | - |
[labelTooltipContent] | Tooltip 内容 | TemplateRef | - |
[labelTooltipDisabled] | 是否禁用 Tooltip | boolean | false |
[labelModalTitle] | 标注框标题 | string | - |
[labelModalContent] | 标注框内容 | TemplateRef | - |
[labelModalDisabled] | 是否禁用标注框 | boolean | false |
(createLabels) | 开始标注事件 | EventEmitter<ICreateLabelsEvent> | - |
(deleteLabels) | 删除标注事件 | EventEmitter<IDeleteLabelsEvent> | - |
(clickLabels) | 点击标注事件 | EventEmitter<IClickLabelsEvent> | - |
(pdfLoadFailed) | PDF 加载失败 | EventEmitter | - |
3.2 表格标注
LabelTableHub
成员方法
名称 | 类型 | 描述 |
---|---|---|
init | (options: IInitTableOptions) => void | 初始化标注器 |
patch | (options: Partial<IInitTableOptions>) => void | 更新标注器 |
setTables | (labels: ITables) => void | 设置表格标注列表 |
getTables | () => ITables | 获取表格标注列表 |
getDirtyTables | () => ITables | 获取表格标注数据(差量) |
scrollToTableCell | (params: IScrollToTableCellsParams) => void | 通过坐标跳转到某个单元格 |
restore | () => void | 丢掉临时标注重新渲染 |
bixi-label-text
成员 | 说明 | 类型 | 默认值 |
---|---|---|---|
[engine] | 标注引擎地址 | string | ./bixi-label/index.html |
[hub] | 标注器控制器 | LabelHub | - |
(pdfLoadFailed) | PDF 加载失败 | EventEmitter | - |
(mergeTables) | 合并跨页表格 | EventEmitter | - |
(separateTable) | 拆分跨页表格 | EventEmitter | - |
Type
interface IInitBaseOptions {
id: string;
pdfUrl: string;
pdfInfoUrl: string;
pdfCharsUrl: string;
engineMode: EngineMode;
pdfSize?: number;
}
export interface ITextInitOptions extends IInitBaseOptions {
operateMode: TextOperateMode;
selectedLabeStyle?: Partial<CSSStyleDeclaration>;
labelStyle?: Partial<CSSStyleDeclaration>;
}
export interface ITableInitOptions extends IInitBaseOptions {
operateMode: TableOperateMode;
mergeable?: boolean;
splitable?: boolean;
}
1 year ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago