2016-10-25 3 views
0

Пожалуйста, проверьте приведенный ниже код. Я работаю над созданием «Angular2 CLI» angular 2 с помощью машинописных. и у меня возникла проблема с , вызывающая функцию класса внутри анонимной функции.угловая функция вызова 2 машинописных символов

Для примера я хочу вызвать readFile() функцию внутри showDialog()

Что я думаю! неправильный ~

Извините Для моего английского.

import {Injectable} from '@angular/core'; 
import {Observable} from "rxjs"; 
import "rxjs/Rx"; 

@Injectable() 
export class SelectFileService { 

    ImageExtensions: string[] = ['jpg', 'jpeg', 'png', 'gif']; 

    constructor() { 
    } 


    public showDialog(): Observable<string[]> { 
     return Observable.create((observer) => { 
      dialog.showOpenDialog({ 
       properties: ['multiSelections'], 
       filters: [ 
        {name: 'Images', extensions: this.ImageExtensions} 
       ] 
      }, function (fileNames) { 
       if (fileNames === undefined) { 
        observer.error("ERROR"); 
        return; 
       } else { 
        observer.next(fileNames); 
        observer.complete(); 
        //Tried Below and not working 
        // this.readFile(fileNames[0]); 
        // Also tried java type 
        // SelectFileService.readFile(fileNames[0]); 
       } 
      }); 
     }); 
    } 

    public readFile(filePath: string): Observable<string> { 
     return Observable.create((observer) => { 
      fs.readFile(filePath, 'utf-8', function (err, data) { 
       if (err) { 
        observer.error(err.message); 
       } 
       observer.next(data); 
       observer.complete(); 
      }); 
     }); 

    } 
} 

В компоненте:

this.selectfileservice.showDialog().subscribe(x => console.log(x))

ответ

1

Ваше выражение функция не сохраняет охватывающую this. Вместо этого используйте функцию стрелки:

return Observable.create((observer) => { 
      dialog.showOpenDialog({ 
       properties: ['multiSelections'], 
       filters: [ 
        {name: 'Images', extensions: this.ImageExtensions} 
       ] 
      }, (fileNames) => { // <---- here ---- 
       if (fileNames === undefined) { 
        observer.error("ERROR"); 
+0

Thank you :). , , – Raj

Смежные вопросы