مرحبًاSebastianM. هل يمكنك أن تخبرني كيف يمكنني الحصول على مثيل من SebmGoogleMapMarker للحصول على محدد أصلي؟
علي سبيل المثال:
this.markerManager.getNativeMarker(INSTANCE_OF_SebmGoogleMapMarker).then((nativeMarker) => {
console.log('YEAH marker is here: ' + nativeMarker);
})
لقد وجدت الحل
بالنسبة للآخرين المهتمين بالحل ، يجب عليك إنشاء توجيه جديد ، ووضعه داخل مكون sebm-google-map. اجعل كائن MarkerManager محقونًا في هذا المكون ، ثم أرسله بخاصية الإخراج لتمريره إلى المكون الرئيسي. علي سبيل المثال:
<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>
ثم
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;
})
}
}
أخيرًا في المكون الرئيسي ، استخدم مدير العلامات (والعلامات) مثل:
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);
});
}
}
مرحبًاmaxmumford
هذا ما أريده بالضبط ،
شكرا جزيلا.
تضمين التغريدة
لدي مشكلة واحدة أخرى.
أرغب في إضافة infowindow يدويًا عند المرور فوق العلامة.
هل من فضلك أرسل بعض الأمثلة على ذلك؟
التعليق الأكثر فائدة
بالنسبة للآخرين المهتمين بالحل ، يجب عليك إنشاء توجيه جديد ، ووضعه داخل مكون sebm-google-map. اجعل كائن MarkerManager محقونًا في هذا المكون ، ثم أرسله بخاصية الإخراج لتمريره إلى المكون الرئيسي. علي سبيل المثال:
ثمسيبدو التوجيه مثل هذا:
أخيرًا في المكون الرئيسي ، استخدم مدير العلامات (والعلامات) مثل: