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() { finish() {
const target = this.editor.getTarget(); const target = this.editor.getTarget();
this.editor.setTarget(null); this.editor.setTarget(null);
this.editor.close();
return target; return target;
} }

27
src/map/editors/RectangleEditor.ts

@ -2,8 +2,33 @@ import { OverlayTypes } from "@types";
import { BaseOverlayEditor } from "./BaseOverlayEditor"; import { BaseOverlayEditor } from "./BaseOverlayEditor";
export class RectangleEditor extends BaseOverlayEditor<AMap.RectangleEditor> { 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) { 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 { getType(): OverlayTypes {

4
src/map/index.ts

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

2
src/types/index.ts

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

Loading…
Cancel
Save