Вызов сервисной функции после файла stingify. Angular

#javascript #angular

#javascript #angular

Вопрос:

Мне нужно вызвать функцию из сервиса со строкой, полученной в результате операции stringify . Но когда я пытаюсь вызвать его «this.xmlservice.parsexml», он говорит, что эта функция недоступна для FileReader. Я не знаю, когда я вызываю класс FileReader.

HTML:

 <input type="file" id="upload" style="display:none" (change)="handleMTPInput($event.target.files)">
  

JS:

 constructor(private fileService: fileService, private xmlservice: XMLservice, private _http: HttpClient, private libservice: libraryService) { }

handleMTPInput(files: FileList) {
if (files.length === 0) {
  console.log('No file is selected');
  return;      
}
var reader = new FileReader();
reader.onload = function (event) {
  this.xmlservice.parsexml(event.target.result[0]);
};
reader.readAsText(files[0]);  
}
  

Комментарии:

1. проверьте контекст вашего «this», возможно, это относится к экземпляру FileReader, а не к экземпляру вашего класса

Ответ №1:

Вместо этого используйте функцию со стрелкой, чтобы ваш this контекст был классом в вашем JS-коде, например:

 constructor(private fileService: fileService, private xmlservice: XMLservice, private _http: HttpClient, private libservice: libraryService) { }

handleMTPInput(files: FileList) {
if (files.length === 0) {
  console.log('No file is selected');
  return;      
}
var reader = new FileReader();
reader.onload = (event) => this.xmlservice.parsexml(event.target.result[0]);

reader.readAsText(files[0]);  
}