2016-10-11 2 views
2

에서의 FileReader에서 값을 가져 I이 파일을로드하고 문자열로 자신의 컨텐츠를 결합하는 다음과 같은 구성 요소각도 2

export class NgCsvComponent { 

     @Input() csv: any; 

     @Output() csvChange: any = new EventEmitter(); 

     public localCsv : any = ''; 

     constructor() { } 

     changeListener($event): void { 
     this.readFile($event.target); 
     } 

     readFile (inputValue : any) : void { 
     let reader = new FileReader(), 
       file : File = inputValue.files[0]; 
      reader.readAsText(file);  
     reader.onload = this.onLoadCallback; 
     } 

     onLoadCallback (event) { 
      this.csvChange.emit(event.target["result"]); 
     } 
    } 

문제는 this.csvChange가 나는 결과를 전달할 수 있도록하는 방법을 onLoadCallback 내부에 정의되지이다 내 구성 요소의 일부 변수에?

나는 다른 검색 유사 question했지만 onloadCallback 기능 이외의 결과를 결코

답변

5

당신이 할 때 문제가 컨텍스트가 손실된다는 점이다 :

reader.onload = this.onLoadCallback; 

하나의 솔루션은 다음과 같습니다

reader.onload = (e: Event) => { 
    this.onLoadCallback(e); 
} 

다른 하나는 다음과 같습니다.

reader.onload = this.onLoadCallback.bind(this); 

또 다른 하나는 다음과 같습니다

onLoadCallback = (event) => { 
    this.csvChange.emit(event.target["result"]); 
} 

결론. this 컨텍스트가 항상 class 안에 남아 있는지 확인하십시오.

+0

첫 번째 솔루션을 사용해 주셔서 감사합니다. – oriaj