我为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的需要?我认为我的过程非常错误
答案 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.
}