File

projects/ngx-amap/src/directives/amap-marker/amap-marker.service.ts

Index

Properties
Methods

Constructor

constructor(amaps: AMapService, logger: LoggerService, ngZone: NgZone)
Parameters :
Name Type Optional
amaps AMapService No
logger LoggerService No
ngZone NgZone No

Methods

create
create(options: AMap.Marker.Options, addToMap)

创建点标记 AMap.Marker

Parameters :
Name Type Optional Default value Description
options AMap.Marker.Options No

选项

addToMap No true

是否直接加进地图

Returns : any
destroy
destroy()

销毁点标记

Returns : void
get
get()

获取点标记

Returns : any

Properties

Private marker
Type : AMap.Marker
Private marker$
Default value : new ReplaySubject<AMap.Marker>(1)
import { Injectable, NgZone } from '@angular/core';
import { ReplaySubject } from 'rxjs';
import { map } from 'rxjs/operators';
import { AMapService } from '../../shared/amap.service';
import { LoggerService } from '../../shared/logger/logger.service';
import { Getter } from '../../base/interfaces';

const TAG = 'AmapMarker';

@Injectable()
export class AmapMarkerService implements Getter<AMap.Marker> {
  private marker: AMap.Marker;
  private marker$ = new ReplaySubject<AMap.Marker>(1);

  constructor(private amaps: AMapService, private logger: LoggerService, private ngZone: NgZone) {}

  /**
   * 获取点标记
   */
  get() {
    return this.marker$.asObservable();
  }

  /**
   * 创建点标记 AMap.Marker
   * @param options 选项
   * @param addToMap 是否直接加进地图
   */
  create(options: AMap.Marker.Options, addToMap = true) {
    return this.amaps.get().pipe(
      map(m => {
        if (addToMap) {
          options.map = m;
        }
        this.marker = this.ngZone.runOutsideAngular(() => new AMap.Marker(options));
        this.logger.d(TAG, 'new marker created.');
        this.marker$.next(this.marker);
        this.marker$.complete();
        return this.marker;
      }),
    );
  }

  /**
   * 销毁点标记
   */
  destroy() {
    this.get().subscribe(m => {
      m.setMap(null);
      this.logger.d(TAG, 'marker destroyed.');
      this.marker = null;
    });
  }
}

result-matching ""

    No results matching ""