2017-06-01 7 views
10
import { GoogleMapsAPIWrapper } from '@agm/core'; 
import { Component, Input } from '@angular/core'; 

@Component({ 
    selector: 'core-map', 
    styleUrls: [ './map.component.scss' ], 
    templateUrl: './map.component.html', 
}) 
export class MapComponent { 
    constructor(
    public gMaps: GoogleMapsAPIWrapper 
) {} 

    public markerClicked = (markerObj) => { 
    this.gMaps.setCenter({ lat: markerObj.latitude, lng: markerObj.longitude }); 
    console.log('clicked', markerObj, { lat: markerObj.latitude, lng: markerObj.longitude }); 
    } 
} 
console output: Object {lat: 42.31277, lng: -91.24892} 

में भी काम नहीं कर रहा है, उसी परिणाम के साथ पैनटो भी कोशिश की है।setCenter angular2-google-maps

+0

आप कुछ प्रदान करें सकते हैं प्रश्न के साथ अधिक जानकारी? –

उत्तर

16

अंततः यह काम कर रहा है। agm-map का एक बाल घटक बनाना था और लोड पर एक आउटपुट बनाना था, मूल Google मानचित्र एपीआई रैपर पकड़ता है और मेरे मूल मानचित्र घटक में गुजरता है। काश वे इसे बनाते हैं ताकि आप नियमित agm-map घटक में gmaps एपीआई रैपर को पकड़ सकें। पैनटो के साथ भी काम करता है।

PARENT घटक मार्कअप

<agm-map [latitude]='lat' [longitude]='lng' 
    [usePanning]='true'> 
    <agm-marker *ngFor='let location of locations' 
    [latitude]='location.latitude' 
    [longitude]='location.longitude' 
    [iconUrl]='location.icon' 
    (markerClick)='markerClicked(location)'></agm-marker> 
    <core-map-content (onMapLoad)='loadAPIWrapper($event)'></core-map-content> 
</agm-map> 

PARENT घटक

/** 
* Map Component 
* API Docs: https://angular-maps.com/docs/api/latest/ts/ 
*/ 
import { GoogleMapsAPIWrapper } from '@agm/core'; 
import { Component, Input } from '@angular/core'; 

declare var google:any; 

@Component({ 
    selector: 'core-map', 
    styleUrls: [ './map.component.scss' ], 
    templateUrl: './map.component.html', 
}) 
export class MapComponent { 
    @Input() lat: number; 
    @Input() lng: number; 
    @Input() locations: {}; 
    map: any; 

    constructor(
    public gMaps: GoogleMapsAPIWrapper, 
) {} 

    public loadAPIWrapper(map) { 
    this.map = map; 
    } 

    public markerClicked = (markerObj) => { 
    const position = new google.maps.LatLng(markerObj.latitude, markerObj.longitude); 
    this.map.panTo(position); 
    } 
} 

बाल घटक

import { Component, EventEmitter, OnInit, Output } from '@angular/core'; 

import { GoogleMapsAPIWrapper } from '@agm/core'; 

@Component({ 
    selector: 'core-map-content', 
    template: '', 
}) 
export class MapContentComponent implements OnInit { 
    @Output() onMapLoad: EventEmitter<{}> = new EventEmitter<{}>(); 

    constructor(public gMaps: GoogleMapsAPIWrapper) {} 

    ngOnInit() { 
    this.gMaps.getNativeMap().then((map) => { 
     this.onMapLoad.emit(map); 
    }); 
    } 
} 
+0

बच्चे के घटक के मुकाबले कोई रास्ता नहीं है? –

+0

@ f.khantsis सही, यह एकमात्र समाधान है जो मैंने पाया है। यह बहुत सुंदर नहीं है। –

+0

मैं यह जोड़ना चाहता हूं कि आपको 'gMap' इंजेक्शन की आवश्यकता नहीं है क्योंकि उदाहरण बच्चे से आएगा। आपको अपने मॉड्यूल प्रदाताओं को रैपर जोड़ने की भी आवश्यकता नहीं है, बस 'this.map' उदाहरण का उपयोग करें। मुझे यकीन नहीं है कि डिफ़ॉल्ट रूप से एएमएम घटक द्वारा रैपर क्यों नहीं उजागर किया जाता है लेकिन स्पष्ट रूप से यह डिज़ाइन द्वारा किया जाता है: "एडम-मैप इंस्टेंस बनने पर GoogleMapsAPIWraper बनाया जाता है। यह पूरी तरह से जानबूझकर है। हम प्रति मानचित्र एक उदाहरण बनाए रखते हैं। अगर आप मानचित्र का उदाहरण प्राप्त करना चाहते हैं, आप एक कस्टम घटक बना सकते हैं और कन्स्ट्रक्टर के माध्यम से GoogleMapsAPIWrapper इंजेक्ट कर सकते हैं। " – cen

संबंधित मुद्दे

 संबंधित मुद्दे