2016-05-31 19 views
3

Ich versuche, eine eigene Infowindow zu erstellen, die ich an die Eltern eines Google-Maps-Klasse Appen die Funktion sieht wie folgt aus, die durch Klicken auf eine Markierung ausgelöst wird:Angular2- anhängen Variable nicht definiert ist

updateDiv(location: Location) { 
this.selectedLocation = location; 
this.isClicked = true; 
this.ID = this.selectedLocation.id; 


console.log(this.ID) 

$(function() { 
    $('.gm-style-iw').parent().append('<div class="test"><span class="ID">'+ this.ID +'</span></div>'); 
}); 
} 

Die console.log zeigt die ID des angeklickten Markers an, aber in div class='test' erscheint es als undefiniert.

Warum ist das?

Oder ist es auch möglich, ein div anzuhängen, das Sie in der HTML-Vorlage erstellt haben? Die wie folgt aussieht:

<div *ngIf="isClicked" class="infoWindow"> 
    <p>{{ selectedLocation.id }} {{ selectedLocation.content }}</p> 
</div> 

Antwort

1

Zwei Dinge.

Erstens: Wie von Gunter erwähnt, werden Sie durch den Umfang undefiniert. Fettpfeilfunktionen könnten Ihr Problem lösen.

Zweitens: Ich denke, eine bessere Lösung für Ihr Problem wäre die Verwendung von innerHtml.

<div [innerHtml]="myHtml"></div>

Und

myHtml: string; 
 

 

 
constructor() { 
 
    this.myHtml = '<input type="text">' 
 
}

Update! Wie OP ist bereits die Winkel-Karten-Komponente verwendet wird, ist die beste Lösung bereits dort mit dem SebmGoogleMapInfoWindow

Innerhalb der Komponente Markup Sie Ihre eigenen HTML können sein:

<sebm-google-map-info-window> 
 
    <div [innerHtml]="infoW" ></div> 
 
</sebm-google-map-info-window>

Und da die Komponente ein clickedMarker-Ereignis bereitstellt. Sie können es verwenden, um Ihre benutzerdefinierte HTML einfügen:

clickedMarker(label: string, index: number) { 
 
    this.infoW = '<input type="text" value="' + label + '"> <hr> <button class="btn btn-success">Index = ' + index + '</button>'  
 
    }

Voll Beispiel Hier http://plnkr.co/edit/mG5cXP?p=preview

+0

Dies ist nicht diese Arbeit ist das, was ich tat. '$ (‘ g-Stil -iw '). Eltern().anhängen (‚

'+ '
‚+ ‘
‚) ' Und diese im Konstruktor aber es zeigt nicht den Inhalt des innerhtml ' this.myHtml =‘
'+ ''+ ''+ this.ID + ''+ ''+ '
‘ ' – Sreinieren

+0

Sie nicht jQuery benötigen überhaupt . Der [innerHtml] = "myHtml" muss in die Vorlage HTML eingefügt werden. Stellen Sie sich einen Host für HTML-Code vor, der von einer beliebigen Variablen innerhalb des Modells bereitgestellt wird. –

+0

Aber ich es auf eine Google-Maps-Klasse am Anfügen überlagert es die Standard-infowindow: https://plnkr.co/edit/QZLs74?p=preview – Sreinieren

Verwandte Themen