From 8bfd7b25bf042ed24f97741329a4b67387eec43f Mon Sep 17 00:00:00 2001 From: aymeric-duchein <32835655+aymeric-duchein@users.noreply.github.com> Date: Tue, 2 Oct 2018 20:28:14 +0200 Subject: [PATCH 1/3] fix(source): check host instance before setSource (#197) From ba78923d897c0e4a51b3c86b3db5926b61dc06a1 Mon Sep 17 00:00:00 2001 From: samuel-girard <32910196+samuel-girard@users.noreply.github.com> Date: Tue, 9 Oct 2018 08:56:45 +0200 Subject: [PATCH 2/3] feat(source): update params when input changes (TileWMS and ImageWMS) (#199) --- .../src/lib/sources/imagewms.component.ts | 10 ++++++++-- .../src/lib/sources/tilewms.component.ts | 10 ++++++++-- 2 files changed, 16 insertions(+), 4 deletions(-) diff --git a/projects/ngx-openlayers/src/lib/sources/imagewms.component.ts b/projects/ngx-openlayers/src/lib/sources/imagewms.component.ts index 3688e986..6b8e2aa8 100644 --- a/projects/ngx-openlayers/src/lib/sources/imagewms.component.ts +++ b/projects/ngx-openlayers/src/lib/sources/imagewms.component.ts @@ -1,4 +1,4 @@ -import { Component, Host, Input, OnInit, forwardRef } from '@angular/core'; +import { Component, Host, Input, OnChanges, OnInit, forwardRef, SimpleChanges } from '@angular/core'; import { AttributionLike, ImageLoadFunctionType, ProjectionLike, source } from 'openlayers'; import { LayerImageComponent } from '../layers/layerimage.component'; import { SourceComponent } from './source.component'; @@ -8,7 +8,7 @@ import { SourceComponent } from './source.component'; template: ``, providers: [{ provide: SourceComponent, useExisting: forwardRef(() => SourceImageWMSComponent) }], }) -export class SourceImageWMSComponent extends SourceComponent implements OnInit { +export class SourceImageWMSComponent extends SourceComponent implements OnChanges, OnInit { instance: source.ImageWMS; @Input() @@ -42,4 +42,10 @@ export class SourceImageWMSComponent extends SourceComponent implements OnInit { this.instance = new source.ImageWMS(this); this.host.instance.setSource(this.instance); } + + ngOnChanges(changes: SimpleChanges) { + if (this.instance && changes.hasOwnProperty('params')) { + this.instance.updateParams(this.params); + } + } } diff --git a/projects/ngx-openlayers/src/lib/sources/tilewms.component.ts b/projects/ngx-openlayers/src/lib/sources/tilewms.component.ts index 0031d2e1..11ee5680 100644 --- a/projects/ngx-openlayers/src/lib/sources/tilewms.component.ts +++ b/projects/ngx-openlayers/src/lib/sources/tilewms.component.ts @@ -1,4 +1,4 @@ -import { Component, Host, Input, OnInit, forwardRef } from '@angular/core'; +import { Component, Host, Input, OnChanges, OnInit, forwardRef, SimpleChanges } from '@angular/core'; import { source, TileLoadFunctionType, tilegrid } from 'openlayers'; import { LayerTileComponent } from '../layers/layertile.component'; import { SourceComponent } from './source.component'; @@ -8,7 +8,7 @@ import { SourceComponent } from './source.component'; template: ``, providers: [{ provide: SourceComponent, useExisting: forwardRef(() => SourceTileWMSComponent) }], }) -export class SourceTileWMSComponent extends SourceComponent implements OnInit { +export class SourceTileWMSComponent extends SourceComponent implements OnChanges, OnInit { instance: source.TileWMS; @Input() cacheSize: number; @@ -45,4 +45,10 @@ export class SourceTileWMSComponent extends SourceComponent implements OnInit { this.instance = new source.TileWMS(this); this.host.instance.setSource(this.instance); } + + ngOnChanges(changes: SimpleChanges) { + if (this.instance && changes.hasOwnProperty('params')) { + this.instance.updateParams(this.params); + } + } } From c40eec72d9e18585d4caa94700b11e72296e47d5 Mon Sep 17 00:00:00 2001 From: FallenRiteMonk Date: Wed, 10 Oct 2018 16:52:26 +0200 Subject: [PATCH 3/3] ssr support --- .../ngx-openlayers/src/lib/map.component.ts | 25 +++++++++++++++++-- 1 file changed, 23 insertions(+), 2 deletions(-) diff --git a/projects/ngx-openlayers/src/lib/map.component.ts b/projects/ngx-openlayers/src/lib/map.component.ts index 1b32b268..a379ecc3 100644 --- a/projects/ngx-openlayers/src/lib/map.component.ts +++ b/projects/ngx-openlayers/src/lib/map.component.ts @@ -8,12 +8,15 @@ import { AfterViewInit, SimpleChanges, OnChanges, + Inject, + PLATFORM_ID, } from '@angular/core'; import { Map, MapBrowserEvent, MapEvent, render, ObjectEvent, control, interaction } from 'openlayers'; +import { isPlatformBrowser } from '@angular/common'; @Component({ selector: 'aol-map', - template: `
`, + template: `
`, }) export class MapComponent implements OnInit, AfterViewInit, OnChanges { public instance: Map; @@ -60,8 +63,14 @@ export class MapComponent implements OnInit, AfterViewInit, OnChanges { // we pass empty arrays to not get default controls/interactions because we have our own directives controls: control.Control[] = []; interactions: interaction.Interaction[] = []; + isBrowser: boolean; + + constructor(@Inject(PLATFORM_ID) private platformId, private host: ElementRef) { + this.isBrowser = isPlatformBrowser(this.platformId); + if (!this.isBrowser) { + return; + } - constructor(private host: ElementRef) { this.onClick = new EventEmitter(); this.onDblClick = new EventEmitter(); this.onMoveEnd = new EventEmitter(); @@ -75,6 +84,10 @@ export class MapComponent implements OnInit, AfterViewInit, OnChanges { } ngOnInit() { + if (!this.isBrowser) { + return; + } + // console.log('creating ol.Map instance with:', this); this.instance = new Map(this); this.instance.setTarget(this.host.nativeElement.firstElementChild); @@ -91,6 +104,10 @@ export class MapComponent implements OnInit, AfterViewInit, OnChanges { } ngOnChanges(changes: SimpleChanges) { + if (!this.isBrowser) { + return; + } + const properties: { [index: string]: any } = {}; if (!this.instance) { return; @@ -105,6 +122,10 @@ export class MapComponent implements OnInit, AfterViewInit, OnChanges { } ngAfterViewInit() { + if (!this.isBrowser) { + return; + } + this.instance.updateSize(); } }