Hai, @SebastianM. Bisakah Anda memberi tahu saya bagaimana saya bisa mendapatkan instance SebmGoogleMapMarker untuk mendapatkan penanda asli?
Misalnya:
this.markerManager.getNativeMarker(INSTANCE_OF_SebmGoogleMapMarker).then((nativeMarker) => {
console.log('YEAH marker is here: ' + nativeMarker);
})
Saya menemukan solusi
Untuk orang lain yang tertarik dengan solusinya, Anda harus membuat direktif baru, dan meletakkannya di dalam komponen sebm-google-map. Minta objek MarkerManager disuntikkan ke dalam komponen ini, lalu pancarkan dengan properti Output untuk meneruskannya ke komponen induk. Sebagai contoh:
<my-parent-component>
<sebm-google-map>
<get-map-objects (markerManager)="setMarkerManager($event)">
<sebm-google-map-marker ... ></sebm-google-map-marker>
</get-map-objects>
</sebm-google-map>
</my-parent-component>
Kemudian
import { Directive, Output, EventEmitter, AfterViewInit, ContentChildren, QueryList } from '@angular/core';
import { GoogleMapsAPIWrapper, MarkerManager, SebmGoogleMapMarker } from 'angular2-google-maps/core';
@Directive({
selector: 'get-map-objects',
})
export class GetMapObjectsDirective implements AfterViewInit {
/**
* Get native map object
*/
private _map: any = null;
@Output('map') mapChanged: EventEmitter<any> = new EventEmitter<any>();
set map(val){
this._map = val;
this.mapChanged.emit(val);
}
get map(){
return this._map;
}
/**
* Get marker manager
*/
private _markerManager: any = null;
@Output('markerManager') markerManagerChanged: EventEmitter<MarkerManager> = new EventEmitter<MarkerManager>();
set markerManager(val){
this._markerManager = val;
this.markerManagerChanged.emit(val);
}
get markerManager(){
return this._markerManager;
}
/**
* Get sebm markers
*/
private _markers: any = null;
@Output('markers') markersChanged: EventEmitter<SebmGoogleMapMarker[]> = new EventEmitter<SebmGoogleMapMarker[]>();
set markers(val){
this._markers = val;
this.markersChanged.emit(val);
}
get markers(){
return this._markers;
}
@ContentChildren(SebmGoogleMapMarker) markerChildren: QueryList<SebmGoogleMapMarker>;
constructor(
private googleMapsWrapper: GoogleMapsAPIWrapper,
private googleMarkerManager: MarkerManager
) { }
ngAfterViewInit() {
// get native map
this.googleMapsWrapper.getNativeMap().then(map => {
this.map = map;
}, error => {
throw error;
})
// get marker manager
this.markerManager = this.googleMarkerManager;
// get markers
this.markerChildren.changes.subscribe(markers => {
this.markers = markers._results;
})
}
}
Terakhir di komponen induk Anda, manfaatkan pengelola marker (dan marker) seperti:
setMarkerManager(markerManager: MarkerManager){
this.markerManager = markerManager;
}
/**
* Sets the markers, used by spidifier
*/
setMarkers(markers: SebmGoogleMapMarker[]){
this.markers = markers;
for(let marker of markers){
this.markerManager.getNativeMarker(marker).then(marker => {
this.overlappingMarkerSpidifier.addMarker(marker);
});
}
}
Hai @maxmumford
Itu yang sebenarnya saya inginkan,
Terima kasih banyak.
@maxmumford
Saya punya satu masalah lagi.
Saya ingin menambahkan infowindow secara manual di hover penanda.
Tolong kirimkan beberapa contoh untuk itu?
Komentar yang paling membantu
Untuk orang lain yang tertarik dengan solusinya, Anda harus membuat direktif baru, dan meletakkannya di dalam komponen sebm-google-map. Minta objek MarkerManager disuntikkan ke dalam komponen ini, lalu pancarkan dengan properti Output untuk meneruskannya ke komponen induk. Sebagai contoh:
Kemudiandirektif akan terlihat seperti ini:
Terakhir di komponen induk Anda, manfaatkan pengelola marker (dan marker) seperti: