La lecture d'un fichier local avec un fichier d'enregistrement, et le " il " de l'objet

Je suis en train d'écrire un texte dactylographié d'application de navigateur. J'ai besoin de lire le contenu d'un fichier XML, et de le stocker dans une classe. Je vais avoir des problèmes avec le " il " de l'objet. Voici ce que j'ai à ce jour:

class FileTools {
  text: string;

  readSingleFile(e) {
    var fileName = e.target.files[0];
    if (!fileName) {
        return;
    }
    var reader = new FileReader();
    reader.onload = file => {
        var contents: any = file.target;
        this.text = contents.result; <== Issue here. 'this' is the filereader
    };
    reader.readAsText(fileName);
}

  start() {
    document.getElementById("file-input").addEventListener("change", this.readSingleFile, false);
  }
}

window.onload = () => {
  var tcx = new FileTools();
  tcx.start();
};

Le HTML a une boîte de sélection de fichier
input type="file" id="fichier d'entrée"

Le problème est que lorsque le fichier est chargé, à l'aide de la " il " pointe vers le fichier de lecteur, pas à ma classe. Si j'ajoute un "self" première variable comme ceci:

  readSingleFile(e) {
    var fileName = e.target.files[0];
    if (!fileName) {
        return;
    }
    var reader = new FileReader();
    var self = this;
    reader.onload = file => {
        var contents: any = file.target;
        self.text = contents.result; <== Issue here. 'this' is the filereader
    };
    reader.readAsText(fileName);
}

alors auto-points à l'entrée de la boîte (comme c'est le contexte de la méthode extérieure).

La question est donc, comment puis-je obtenir le vrai 'cette' objet de la FileTools de référence.

Grâce.

OriginalL'auteur Noam | 2015-12-30