ngx-amap
Version:
[][npm-badge-url] [][npm-badge-url] [][ci-url]
244 lines • 16.9 kB
JavaScript
/**
* @fileoverview added by tsickle
* Generated from: directives/amap-polyline/amap-polyline.directive.ts
* @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
import { Directive, Input, Output, EventEmitter, NgZone, } from '@angular/core';
import { zip } from 'rxjs';
import { PathOverlayOptions, AMapPathOverlay } from '../../base/amap-path-overlay';
import { AmapPolylineService } from './amap-polyline.service';
import { LoggerService } from '../../shared/logger/logger.service';
import { EventBinderService } from '../../shared/event-binder.service';
import { getOptions, ChangeFilter } from '../../utils';
/** @type {?} */
const TAG = 'amap-polyline';
/** @type {?} */
const PolylineOptions = [
...PathOverlayOptions,
'isOutline',
'outlineColor',
'geodesic',
'dirColor',
'borderWeight',
'showDir',
'path',
];
export class AmapPolylineDirective extends AMapPathOverlay {
/**
* @param {?} os
* @param {?} binder
* @param {?} logger
* @param {?} ngZone
*/
constructor(os, binder, logger, ngZone) {
super(os, binder);
this.os = os;
this.binder = binder;
this.logger = logger;
this.ngZone = ngZone;
/**
* 额外: 是否隐藏
*/
this.hidden = false;
/**
* 额外: 是否开启编辑器
*/
this.editor = false;
// directive events:
this.naReady = new EventEmitter();
this.inited = false;
/** @type {?} */
const editor = this.os.getEditor();
this.naEditorAddNode = this.binder.bindEvent(editor, 'addnode');
this.naEditorRemoveNode = this.binder.bindEvent(editor, 'removenode');
this.naEditorAdjust = this.binder.bindEvent(editor, 'adjust');
this.naEditorEnd = this.binder.bindEvent(editor, 'end');
}
/**
* @return {?}
*/
ngOnDestroy() {
this.os.destroy();
}
/**
* @param {?} changes
* @return {?}
*/
ngOnChanges(changes) {
/** @type {?} */
const filter = ChangeFilter.of(changes);
/** @type {?} */
const polyline = this.get();
if (!this.inited) {
this.logger.d(TAG, 'initializing ...');
/** @type {?} */
const options = this.options || getOptions(this, PolylineOptions);
this.logger.d(TAG, 'options:', options);
this.os.create(options).subscribe((/**
* @param {?} m
* @return {?}
*/
m => {
this.ngZone.run((/**
* @return {?}
*/
() => this.naReady.emit(m)));
this.logger.d(TAG, 'polyline is ready.');
}));
this.inited = true;
}
else {
zip(filter.has('path'), polyline).subscribe((/**
* @param {?} __0
* @return {?}
*/
([v, p]) => p.setPath(v)));
zip(filter.has('options'), polyline).subscribe((/**
* @param {?} __0
* @return {?}
*/
([v, p]) => p.setOptions(v || {})));
zip(filter.has('extData'), polyline).subscribe((/**
* @param {?} __0
* @return {?}
*/
([v, p]) => p.setExtData(v)));
}
zip(filter.has('hidden'), polyline).subscribe((/**
* @param {?} __0
* @return {?}
*/
([v, p]) => (v ? p.hide() : p.show())));
filter.has('editor').subscribe((/**
* @param {?} v
* @return {?}
*/
v => this.os.toggleEditor(v)));
}
/**
* 获取已创建的 AMap.Polyline 对象
* @return {?}
*/
get() {
return this.os.get();
}
}
AmapPolylineDirective.decorators = [
{ type: Directive, args: [{
selector: 'amap-polyline',
exportAs: 'polyline',
providers: [AmapPolylineService],
},] }
];
/** @nocollapse */
AmapPolylineDirective.ctorParameters = () => [
{ type: AmapPolylineService },
{ type: EventBinderService },
{ type: LoggerService },
{ type: NgZone }
];
AmapPolylineDirective.propDecorators = {
isOutline: [{ type: Input }],
outlineColor: [{ type: Input }],
geodesic: [{ type: Input }],
dirColor: [{ type: Input }],
borderWeight: [{ type: Input }],
showDir: [{ type: Input }],
path: [{ type: Input }],
hidden: [{ type: Input }],
editor: [{ type: Input }],
options: [{ type: Input }],
naReady: [{ type: Output }],
naEditorAddNode: [{ type: Output }],
naEditorRemoveNode: [{ type: Output }],
naEditorAdjust: [{ type: Output }],
naEditorEnd: [{ type: Output }]
};
if (false) {
/**
* 线条是否带描边
* @type {?}
*/
AmapPolylineDirective.prototype.isOutline;
/**
* 线条描边颜色
* @type {?}
*/
AmapPolylineDirective.prototype.outlineColor;
/**
* 是否绘制成大地线
* @type {?}
*/
AmapPolylineDirective.prototype.geodesic;
/**
* 方向箭头颜色
* @type {?}
*/
AmapPolylineDirective.prototype.dirColor;
/**
* 描边的宽度
* @type {?}
*/
AmapPolylineDirective.prototype.borderWeight;
/**
* 是否延路径显示方向箭头
* @type {?}
*/
AmapPolylineDirective.prototype.showDir;
/**
* 折线的节点数组
* @type {?}
*/
AmapPolylineDirective.prototype.path;
/**
* 额外: 是否隐藏
* @type {?}
*/
AmapPolylineDirective.prototype.hidden;
/**
* 额外: 是否开启编辑器
* @type {?}
*/
AmapPolylineDirective.prototype.editor;
/**
* 额外: 会覆盖其他属性的配置方式
* @type {?}
*/
AmapPolylineDirective.prototype.options;
/** @type {?} */
AmapPolylineDirective.prototype.naReady;
/** @type {?} */
AmapPolylineDirective.prototype.naEditorAddNode;
/** @type {?} */
AmapPolylineDirective.prototype.naEditorRemoveNode;
/** @type {?} */
AmapPolylineDirective.prototype.naEditorAdjust;
/** @type {?} */
AmapPolylineDirective.prototype.naEditorEnd;
/**
* @type {?}
* @private
*/
AmapPolylineDirective.prototype.inited;
/**
* @type {?}
* @protected
*/
AmapPolylineDirective.prototype.os;
/**
* @type {?}
* @protected
*/
AmapPolylineDirective.prototype.binder;
/**
* @type {?}
* @private
*/
AmapPolylineDirective.prototype.logger;
/**
* @type {?}
* @private
*/
AmapPolylineDirective.prototype.ngZone;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW1hcC1wb2x5bGluZS5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9uZ3gtYW1hcC8iLCJzb3VyY2VzIjpbImRpcmVjdGl2ZXMvYW1hcC1wb2x5bGluZS9hbWFwLXBvbHlsaW5lLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLE9BQU8sRUFDTCxTQUFTLEVBQ1QsS0FBSyxFQUVMLE1BQU0sRUFDTixZQUFZLEVBR1osTUFBTSxHQUNQLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDM0IsT0FBTyxFQUFFLGtCQUFrQixFQUFFLGVBQWUsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ25GLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQzlELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUNuRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUN2RSxPQUFPLEVBQUUsVUFBVSxFQUFFLFlBQVksRUFBRSxNQUFNLGFBQWEsQ0FBQzs7TUFFakQsR0FBRyxHQUFHLGVBQWU7O01BQ3JCLGVBQWUsR0FBRztJQUN0QixHQUFHLGtCQUFrQjtJQUNyQixXQUFXO0lBQ1gsY0FBYztJQUNkLFVBQVU7SUFDVixVQUFVO0lBQ1YsY0FBYztJQUNkLFNBQVM7SUFDVCxNQUFNO0NBQ1A7QUFPRCxNQUFNLE9BQU8scUJBQXNCLFNBQVEsZUFBOEI7Ozs7Ozs7SUF1RHZFLFlBQ1ksRUFBdUIsRUFDdkIsTUFBMEIsRUFDNUIsTUFBcUIsRUFDckIsTUFBYztRQUV0QixLQUFLLENBQUMsRUFBRSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBTFIsT0FBRSxHQUFGLEVBQUUsQ0FBcUI7UUFDdkIsV0FBTSxHQUFOLE1BQU0sQ0FBb0I7UUFDNUIsV0FBTSxHQUFOLE1BQU0sQ0FBZTtRQUNyQixXQUFNLEdBQU4sTUFBTSxD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O0lBQ2hELCtDQUE0Qzs7SUFDNUMsNENBQXlDOzs7OztJQUV6Qyx1Q0FBdUI7Ozs7O0lBR3JCLG1DQUFpQzs7Ozs7SUFDakMsdUNBQW9DOzs7OztJQUNwQyx1Q0FBNkI7Ozs7O0lBQzdCLHVDQUFzQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIERpcmVjdGl2ZSxcbiAgSW5wdXQsXG4gIE9uRGVzdHJveSxcbiAgT3V0cHV0LFxuICBFdmVudEVtaXR0ZXIsXG4gIFNpbXBsZUNoYW5nZXMsXG4gIE9uQ2hhbmdlcyxcbiAgTmdab25lLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IHppcCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgUGF0aE92ZXJsYXlPcHRpb25zLCBBTWFwUGF0aE92ZXJsYXkgfSBmcm9tICcuLi8uLi9iYXNlL2FtYXAtcGF0aC1vdmVybGF5JztcbmltcG9ydCB7IEFtYXBQb2x5bGluZVNlcnZpY2UgfSBmcm9tICcuL2FtYXAtcG9seWxpbmUuc2VydmljZSc7XG5pbXBvcnQgeyBMb2dnZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2hhcmVkL2xvZ2dlci9sb2dnZXIuc2VydmljZSc7XG5pbXBvcnQgeyBFdmVudEJpbmRlclNlcnZpY2UgfSBmcm9tICcuLi8uLi9zaGFyZWQvZXZlbnQtYmluZGVyLnNlcnZpY2UnO1xuaW1wb3J0IHsgZ2V0T3B0aW9ucywgQ2hhbmdlRmlsdGVyIH0gZnJvbSAnLi4vLi4vdXRpbHMnO1xuXG5jb25zdCBUQUcgPSAnYW1hcC1wb2x5bGluZSc7XG5jb25zdCBQb2x5bGluZU9wdGlvbnMgPSBbXG4gIC4uLlBhdGhPdmVybGF5T3B0aW9ucyxcbiAgJ2lzT3V0bGluZScsXG4gICdvdXRsaW5lQ29sb3InLFxuICAnZ2VvZGVzaWMnLFxuICAnZGlyQ29sb3InLFxuICAnYm9yZGVyV2VpZ2h0JyxcbiAgJ3Nob3dEaXInLFxuICAncGF0aCcsXG5dO1xuXG5ARGlyZWN0aXZlKHtcbiAgc2VsZWN0b3I6ICdhbWFwLXBvbHlsaW5lJyxcbiAgZXhwb3J0QXM6ICdwb2x5bGluZScsXG4gIHByb3ZpZGVyczogW0FtYXBQb2x5bGluZVNlcnZpY2VdLFxufSlcbmV4cG9ydCBjbGFzcyBBbWFwUG9seWxpbmVEaXJlY3RpdmUgZXh0ZW5kcyBBTWFwUGF0aE92ZXJsYXk8QU1hcC5Qb2x5bGluZT5cbiAgaW1wbGVtZW50cyBPbkNoYW5nZXMsIE9uRGVzdHJveSB7XG4gIC8vIC0tLS0gT3B0aW9ucyAtLS0tXG4gIC8qKlxuICAgKiDnur/mnaHmmK/lkKbluKbmj4/ovrlcbiAgICovXG4gIEBJbnB1dCgpIGlzT3V0bGluZTogYm9vbGVhbjtcbiAgLyoqXG4gICAqIOe6v+adoeaPj+i+ueminOiJslxuICAgKi9cbiAgQElucHV0KCkgb3V0bGluZUNvbG9yOiBzdHJpbmc7XG4gIC8qKlxuICAgKiDmmK/lkKbnu5jliLbmiJDlpKflnLDnur9cbiAgICovXG4gIEBJbnB1dCgpIGdlb2Rlc2ljOiBib29sZWFuO1xuICAvKipcbiAgICog5pa55ZCR566t5aS06aKc6ImyXG4gICAqL1xuICBASW5wdXQoKSBkaXJDb2xvcjogc3RyaW5nO1xuICAvKipcbiAgICog5o+P6L6555qE5a695bqmXG4gICAqL1xuICBASW5wdXQoKSBib3JkZXJXZWlnaHQ6IG51bWJlcjtcbiAgLyoqXG4gICAqIOaYr+WQpuW7tui3r+W+hOaYvuekuuaWueWQkeeureWktFxuICAgKi9cbiAgQElucHV0KCkgc2hvd0RpcjogYm9vbGVhbjtcbiAgLyoqXG4gICAqIOaKmOe6v+eahOiKgueCueaVsOe7hFxuICAgKi9cbiAgQElucHV0KCkgcGF0aDogQU1hcC5Mb2NhdGlvblZhbHVlW107XG4gIC8qKlxuICAgKiDpop3lpJY6IOaYr+WQpumakOiXj1xuICAgKi9cbiAgQElucHV0KCkgaGlkZGVuID0gZmFsc2U7XG4gIC8qKlxuICAgKiDpop3lpJY6IOaYr+WQpuW8gOWQr+e8lui+keWZqFxuICAgKi9cbiAgQElucHV0KCkgZWRpdG9yID0gZmFsc2U7XG4gIC8qKlxuICAgKiDpop3lpJY6IOS8muimhuebluWFtuS7luWxnuaAp+eahOmFjee9ruaWueW8j1xuICAgKi9cbiAgQElucHV0KCkgb3B0aW9uczogQU1hcC5Qb2x5bGluZS5PcHRpb25zO1xuXG4gIC8vIGRpcmVjdGl2ZSBldmVudHM6XG4gIEBPdXRwdXQoKSBuYVJlYWR5ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gIC8vIGVkaXRvciBldmVudHM6XG4gIEBPdXRwdXQoKSBuYUVkaXRvckFkZE5vZGU6IEV2ZW50RW1pdHRlcjxhbnk+O1xuICBAT3V0cHV0KCkgbmFFZGl0b3JSZW1vdmVOb2RlOiBFdmVudEVtaXR0ZXI8YW55PjtcbiAgQE91dHB1dCgpIG5hRWRpdG9yQWRqdXN0OiBFdmVudEVtaXR0ZXI8YW55PjtcbiAgQE91dHB1dCgpIG5hRWRpdG9yRW5kOiBFdmVudEVtaXR0ZXI8YW55PjtcblxuICBwcml2YXRlIGluaXRlZCA9IGZhbHNlO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByb3RlY3RlZCBvczogQW1hcFBvbHlsaW5lU2VydmljZSxcbiAgICBwcm90ZWN0ZWQgYmluZGVyOiBFdmVudEJpbmRlclNlcnZpY2UsXG4gICAgcHJpdmF0ZSBsb2dnZXI6IExvZ2dlclNlcnZpY2UsXG4gICAgcHJpdmF0ZSBuZ1pvbmU6IE5nWm9uZSxcbiAgKSB7XG4gICAgc3VwZXIob3MsIGJpbmRlcik7XG4gICAgY29uc3QgZWRpdG9yID0gdGhpcy5vcy5nZXRFZGl0b3IoKTtcbiAgICB0aGlzLm5hRWRpdG9yQWRkTm9kZSA9IHRoaXMuYmluZGVyLmJpbmRFdmVudChlZGl0b3IsICdhZGRub2RlJyk7XG4gICAgdGhpcy5uYUVkaXRvclJlbW92ZU5vZGUgPSB0aGlzLmJpbmRlci5iaW5kRXZlbnQoZWRpdG9yLCAncmVtb3Zlbm9kZScpO1xuICAgIHRoaXMubmFFZGl0b3JBZGp1c3QgPSB0aGlzLmJpbmRlci5iaW5kRXZlbnQoZWRpdG9yLCAnYWRqdXN0Jyk7XG4gICAgdGhpcy5uYUVkaXRvckVuZCA9IHRoaXMuYmluZGVyLmJpbmRFdmVudChlZGl0b3IsICdlbmQnKTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCkge1xuICAgIHRoaXMub3MuZGVzdHJveSgpO1xuICB9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcykge1xuICAgIGNvbnN0IGZpbHRlciA9IENoYW5nZUZpbHRlci5vZihjaGFuZ2VzKTtcbiAgICBjb25zdCBwb2x5bGluZSA9IHRoaXMuZ2V0KCk7XG4gICAgaWYgKCF0aGlzLmluaXRlZCkge1xuICAgICAgdGhpcy5sb2dnZXIuZChUQUcsICdpbml0aWFsaXppbmcgLi4uJyk7XG4gICAgICBjb25zdCBvcHRpb25zID0gdGhpcy5vcHRpb25zIHx8IGdldE9wdGlvbnM8QU1hcC5Qb2x5bGluZS5PcHRpb25zPih0aGlzLCBQb2x5bGluZU9wdGlvbnMpO1xuICAgICAgdGhpcy5sb2dnZXIuZChUQUcsICdvcHRpb25zOicsIG9wdGlvbnMpO1xuICAgICAgdGhpcy5vcy5jcmVhdGUob3B0aW9ucykuc3Vic2NyaWJlKG0gPT4ge1xuICAgICAgICB0aGlzLm5nWm9uZS5ydW4oKCkgPT4gdGhpcy5uYVJlYWR5LmVtaXQobSkpO1xuICAgICAgICB0aGlzLmxvZ2dlci5kKFRBRywgJ3BvbHlsaW5lIGlzIHJlYWR5LicpO1xuICAgICAgfSk7XG4gICAgICB0aGlzLmluaXRlZCA9IHRydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHppcChmaWx0ZXIuaGFzPEFNYXAuTG9jYXRpb25WYWx1ZVtdPigncGF0aCcpLCBwb2x5bGluZSkuc3Vic2NyaWJlKChbdiwgcF0pID0+IHAuc2V0UGF0aCh2KSk7XG4gICAgICB6aXAoZmlsdGVyLmhhczxBTWFwLlBvbHlsaW5lLk9wdGlvbnM+KCdvcHRpb25zJyksIHBvbHlsaW5lKS5zdWJzY3JpYmUoKFt2LCBwXSkgPT5cbiAgICAgICAgcC5zZXRPcHRpb25zKHYgfHwge30pLFxuICAgICAgKTtcbiAgICAgIHppcChmaWx0ZXIuaGFzPGFueT4oJ2V4dERhdGEnKSwgcG9seWxpbmUpLnN1YnNjcmliZSgoW3YsIHBdKSA9PiBwLnNldEV4dERhdGEodikpO1xuICAgIH1cblxuICAgIHppcChmaWx0ZXIuaGFzPGJvb2xlYW4+KCdoaWRkZW4nKSwgcG9seWxpbmUpLnN1YnNjcmliZSgoW3YsIHBdKSA9PiAodiA/IHAuaGlkZSgpIDogcC5zaG93KCkpKTtcbiAgICBmaWx0ZXIuaGFzPGJvb2xlYW4+KCdlZGl0b3InKS5zdWJzY3JpYmUodiA9PiB0aGlzLm9zLnRvZ2dsZUVkaXRvcih2KSk7XG4gIH1cblxuICAvKipcbiAgICog6I635Y+W5bey5Yib5bu655qEIEFNYXAuUG9seWxpbmUg5a+56LGhXG4gICAqL1xuICBnZXQoKSB7XG4gICAgcmV0dXJuIHRoaXMub3MuZ2V0KCk7XG4gIH1cbn1cbiJdfQ==