2017-04-13 5 views
0

Ich habe ein kleines Problem mit Typoskript und Jquery. Und ja, ich benutze Angular2.Typescript und JQuery zusammen

Mein Code sieht wie folgt aus:

Hier bin ich mit JQuery, damit ich es in ts verwenden

let $ = require('/node_modules/jquery/dist/jquery.js'); 

Auf einem anderen Teil ich bin, die eine Funktion wie diese

public goBack() { 
    console.log("HUHU"); 
    this.router.navigateByUrl('/dash/' + this.projectId); 
} 

So weit so gut ... jetzt ist es das Teil, das JQuery verwendet, das nicht funktioniert:

$(document).ready(function() { 
    $('.modal').modal('show'); 
}); 

$(document).keyup(function (e) { 
    if (e.which == 27 && $('body').hasClass('modal-open')) { 
     this.goBack(); 
    } 
}); 

$(document).click(function (e) { 
    if (e.target === $('.modal')[0] && $('body').hasClass('modal-open')) { 
     this.goBack(); 
    } 
}); 

Was ich hier mache? Ich öffne gerade ein bootstrap Modal (Popup) im ersten Teil mit $('.modal').modal('show'); und das funktioniert sogar. Aber die beiden anderen Teile, Keyup und Klick sogar Handhabung funktionieren auch ABER Ich kann this.goBack() nicht verwenden. In diesen beiden Teilen möchte ich für die Ereignisse fangen:

  • Klicken Sie ESC und Schließen des modalen
  • Ein Klick aus dem modalen (graue Zonen unterteilten) es

zu schließen, wie gesagt, die Modal schließt, aber die URL ändert sich nicht, ändert sich durch Aufruf this.goBack() Und Ideen da draußen?

Vielen Dank im Voraus!

Yadbo

+1

Winkelkomponenten verwalten/Manipulieren nicht DOM Knoten erstrecken. Die Methoden, die Sie in Ihren Komponenten definieren, sind nicht an die DOM-Knoten gebunden. Sie können Ihr Modal in eine eckige Komponente einfügen, sodass Sie es in Ihrer Komponente instanziieren und einige Ereignisrückrufe übergeben können. – Thomas

Antwort

2

ändern

$(document).keyup(function (e) { 

und

$(document).click(function (e) { 

zu

$(document).keyup((e)=> { 

und

$(document).click((e)=> { 

, wenn Sie verwenden function Ihre this wird auf Ihre Komponente nicht beziehen, sondern auf die Instanz der click und keyup Veranstaltungen.

Der Pfeil Notation ist die Kurzversion eines js Schließung der Schaffung:

var self = this; 
$(document).keyup(function (e) { 
    if (e.which == 27 && $('body').hasClass('modal-open')) { 
     self.goBack(); 
    } 
}); 

nachlesen: How to access the correct `this` inside a callback?

+1

Vielen Dank für die schnelle Hilfe, es funktioniert jetzt! – yadbo

Verwandte Themen