Angular 5了解外部类导入

时间:2018-04-23 06:49:58

标签: angular class typescript

我为Schedules创建了一个类模型。然后我将这个类导入我的主程序。我的问题是这个类使用HttpClient,我教导它使用它的方法是在类的构造函数中为它创建变量。但问题出现了,当我创建一个新的Schedule实例(newSchedule = new Schedule;)时,它需要一个参数来代替HttpClient。当我想创建一个新的类实例时,如何让它忽略HttpClient?

这是Schedule模型类:

import { HttpClient } from '@angular/common/http';
export class Schedule {
    constructor(private httpClient: HttpClient) {}
}

但现在我需要在我的主程序中传递this.HttpClient,当然不需要:

import { HttpClient } from '@angular/common/http';
export class AppComponent {
    constructor(private httpClient: HttpClient) {}
    var NewSchedule = new Schedule(this.HttpClient);
}

如何删除传递this.HttpClient的需要?我认为我的过程非常错误

2 个答案:

答案 0 :(得分:3)

你的过程似乎确实是错误的。但是你请求帮助,所以我们提供帮助。

您需要使构造函数的参数可选。这样做:

export class Schedule {
  constructor(private http?: HttpClient){}
}

您也可以给它一个默认值:

export class Schedule {
  constructor(private http: HttpClient = null){}
}

答案 1 :(得分:0)

阅读评论后,我理解的是,您希望拥有Schedule类的不同实例,但仍希望访问httpClient对象。

执行以下操作可能是一种解决方案:

Schedule类下创建一个公共方法:

public getNewInstance(object: Object) {
    let obj = Object.create(object.constructor.prototype);
    object.constructor.apply(obj, [this.httpClient]);
    return obj;
}

同时让您的Subject课程可注射。请注意,您的类将是另一个类中的注入和单例,但您将有办法使用该单例获取多个实例

做类似的事情:

@Injectable()
export class Schedule ...

然后,在您的appComponent中,注入Subject

export class AppComponent {
constructor(private subjectInstance: Subject) {}
...

private newSubjectInstance;
ngOnInit() {
    this.newSubjectInstance = this.subjectInstance.getNewInstance(this.subjectInstance);
    // so this should be a new instance but still have the httpClent inside it.
}