Angular 2 typescript调用函数

angular 2 typescript calling function

本文关键字:函数 调用 typescript Angular      更新时间:2023-09-26

请检查以下代码。我正在使用typescript第一次使用"Angular2 CLI"生成的angular 2。和我一直有一个问题在调用类函数在匿名函数。

例如,我想在showDialog()

中调用readFile()函数

我在想什么呢?错~

对不起我的英语。

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))

您的函数表达式不保留封闭的this。使用箭头函数代替:

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