TypeScript: fjerner lytter for lokal fet pil
Jeg vil gjerne bruke en lokal fet pil for å bevare this-konteksten som:
document.addEventListener("keydown", (e: KeyboardEvent) => myobject.keyDownlistener(e));
Og jeg vil gjerne kunne fjerne denne lytteren senere, men ingen av de følgende fungerer:
document.removeEventListener("keydown", (e: KeyboardEvent) => myobject.keyDownlistener(e));
document.removeEventListener("keydown", myobject.keyDownlistener);
Hva kan jeg gjøre?
Svar #1
fjern denne lytteren senere, men ingen av følgende fungerer:
Hver gang du lager ()=> lager du en ny funksjon. Så du må sørge for at du legger til og fjerner den samme funksjonen:
// What you add
document.addEventListener("keydown", myobject.keyDownlistener);
// Is what you should remove
document.removeEventListener("keydown", myobject.keyDownlistener);
For å bevare this-konteksten, sørg for at myobject.keyDownlistener er definert som en fet pil (i stedet for en prototype-funksjon)
Mer
https://basarat.gitbooks.io/typescript/content/docs/arrow-functions.html
Svar #2
du kan lagre en referanse til den inline-funksjonen i en variabel (eller objektets egenskap som vist i dette eksemplet) og senere sende den inn i kallet til addEventListener
var myobject = {
keyDownlistener: function (e) {
if (e.key==="Enter") {
console.log('you typed',this.msg);
document.removeEventListener("keydown", myobject.kdl);
}
if (!this.msg) this.msg='';
this.msg += e.key;
}
};
document.addEventListener("keydown", myobject.kdl = (e) => myobject.keyDownlistener(e));Click here then type a message followed by enterhvis du er fornøyd med å bruke en ekstern variabel:
var kd,myobject = {
keyDownlistener: function (e) {
if (e.key==="Enter") {
console.log('you typed',this.msg);
document.removeEventListener("keydown",kd);
}
if (!this.msg) this.msg='';
this.msg += e.key;
}
};
document.addEventListener("keydown", kd = (e) => myobject.keyDownlistener(e));click here and type a line of text