Browse Source

解决切换overlay后创建报错问题

master
Cmen 3 years ago
parent
commit
33318bbeb8
  1. 1
      src/map/editors/BaseOverlayEditor.ts
  2. 27
      src/map/editors/RectangleEditor.ts
  3. 4
      src/map/index.ts
  4. 2
      src/types/index.ts

1
src/map/editors/BaseOverlayEditor.ts

@ -18,6 +18,7 @@ export abstract class BaseOverlayEditor<T extends AMap.BaseEditor> {
finish() {
const target = this.editor.getTarget();
this.editor.setTarget(null);
this.editor.close();
return target;
}

27
src/map/editors/RectangleEditor.ts

@ -2,8 +2,33 @@ import { OverlayTypes } from "@types";
import { BaseOverlayEditor } from "./BaseOverlayEditor";
export class RectangleEditor extends BaseOverlayEditor<AMap.RectangleEditor> {
// private _rect: AMap.Rectangle | undefined;
// constructor(map: AMap.Map) {
// super(map);
// this._rect = new AMap.Rectangle({
// bounds: new AMap.Bounds(
// new AMap.LngLat(0, 0.001),
// new AMap.LngLat(0, 0.001)
// ),
// });
// }
initEditor(map: AMap.Map) {
return new AMap.RectangleEditor(this.map);
return new AMap.RectangleEditor(map);
}
finish() {
const target = this.editor.getTarget();
if (target == null) {
this.editor.close();
// FixME: 直接close, 切换其他工具会有报错.
(this.editor as any)._creator?.close();
} else {
this.editor.setTarget(null);
this.editor.close();
}
return target;
}
getType(): OverlayTypes {

4
src/map/index.ts

@ -61,6 +61,7 @@ export class MapEditor extends Emitter {
update(mapState: IMapState) {
const { status, overlayType } = mapState;
if (status === "createOverlay") {
this.finishCreateOverlay();
this._currentOverlayEditor = this.overlayEditors.find(
(editor) => editor.getType() === overlayType
);
@ -71,6 +72,7 @@ export class MapEditor extends Emitter {
finishCreateOverlay() {
if (this._currentOverlayEditor == null) return;
const target = this._currentOverlayEditor.finish();
console.log(target);
let evt: any = null;
if (target != null) {
const id = getUuid();
@ -80,7 +82,7 @@ export class MapEditor extends Emitter {
type: this._currentOverlayEditor.getType(),
};
}
this.emit(EventTypes.FinishCreateOverlay, evt);
evt && this.emit(EventTypes.FinishCreateOverlay, evt);
}
initEditors() {

2
src/types/index.ts

@ -12,6 +12,8 @@ declare global {
setTarget(target: any): void;
getTarget(): MapOverlay;
open(): void;
close(): void;
destroy(): void;
}
class PolygonEditor extends BaseEditor {
//

Loading…
Cancel
Save