Angular 6:在新类构造函数中提供func

时间:2019-02-28 08:38:09

标签: angular typescript

很抱歉,如果它与某人的问题重复。但是我找不到解决问题的方法。

我有一个Angular 6应用。然后我提供了服务(不可注射)。

我需要创建一个新的服务实例,然后在内部创建一些魔术,然后在外部调用函数。但是,当我向组件的函数返回值时,我看不到组件的变量。这是代码示例:

example.component.ts

import { Calculation } from './calculation.service';

export class ExampleComponent implements OnInit {
    test: 1;
    potatoes: 2
    calculation: Calculation;

    ngOnInit() {
        this.calculation = new Calculation(this.doExternalMagic, this.potatoes)
    }

    doExternalMagic(potatoes: number) {
        console.log(potatoes);  // 3
        console.log(this.test); // undefined
    }
}

calculation.service.ts

export class Calculation {
    // i'm not sure that doExternalMagic should have type of Function
    constructor(private doExternalMagic: Function, private potatoes: number) { }

    public init() {
        this.potatoes = this.potatoes + 1;
        this.doExternalMagic(this.potatoes);
    }

}

我也曾尝试在doExternalMagic构造函数中将Calculation设为公开,但是结果是一样的。在服务中提供func时,似乎做错了。我该如何正确提供它以在组件外部制作魔术?

1 个答案:

答案 0 :(得分:2)

将您的函数作为箭头函数传递:

ngOnInit() {
    this.calculation = new Calculation((potatoes) => this.doExternalMagic(potatoes), this.potatoes)
}

或使用bind()。问题是this关键字上下文。