super() 中的打字稿依赖注入
typescript dependency injection in super()
我有一个名为 restService 的 class,如下所示:
@Injectable({
providedIn: 'root'
})
export class RestService {
private baseUrl: string;
constructor(private http: HttpClient) {
this.baseUrl = environment.jsonServerUrl;
}
}
我有另一个 class extends RestService class 调用 UploaderService 像这样:
@Injectable({
providedIn: 'root'
})
export class UploaderService extends RestService {
constructor() {
super(); // error occurred here!
}
}
但是当我写 super 方法时发生错误,因为 RestService Class 在其构造函数中有依赖注入,我不知道如何在 super 中注入它。
我该如何解决?
您需要通过注射
@Injectable({
providedIn: 'root'
})
export class UploaderService extends RestService {
constructor(http: HttpClient) {
super(http);
}
}
super的参数class需要重复传给super调用:
@Injectable({
providedIn: 'root'
})
export class UploaderService extends RestService {
constructor (http: HttpClient){
super(http);
}
}
您可以重复参数,如其他答案所示。
不过,还有另一种方法,当您有很多参数并扩展 classes 时,它会很方便:使用 Injector
获取基础 class 中的依赖项。
然后,你只需要在派生的classes中重复"Injector"注入,当你有很多服务要注入时,这可以节省很多space和头脑清醒基础 class,但在派生 class.
中并不多
import { MyService } from './my.service';
import { FooService } from './foo.service';
import { Injector } from '@angular/core';
export class Base {
protected myService: MyService;
protected fooService: FooService;
constructor (protected injector: Injector) {
this.myService = injector.get(MyService);
this.fooService = injector.get(FooService);
}
}
export class Derived extends Base {
constructor(protected injector: Injector) {
super(injector);
}
}
我有一个名为 restService 的 class,如下所示:
@Injectable({
providedIn: 'root'
})
export class RestService {
private baseUrl: string;
constructor(private http: HttpClient) {
this.baseUrl = environment.jsonServerUrl;
}
}
我有另一个 class extends RestService class 调用 UploaderService 像这样:
@Injectable({
providedIn: 'root'
})
export class UploaderService extends RestService {
constructor() {
super(); // error occurred here!
}
}
但是当我写 super 方法时发生错误,因为 RestService Class 在其构造函数中有依赖注入,我不知道如何在 super 中注入它。 我该如何解决?
您需要通过注射
@Injectable({
providedIn: 'root'
})
export class UploaderService extends RestService {
constructor(http: HttpClient) {
super(http);
}
}
super的参数class需要重复传给super调用:
@Injectable({
providedIn: 'root'
})
export class UploaderService extends RestService {
constructor (http: HttpClient){
super(http);
}
}
您可以重复参数,如其他答案所示。
不过,还有另一种方法,当您有很多参数并扩展 classes 时,它会很方便:使用 Injector
获取基础 class 中的依赖项。
然后,你只需要在派生的classes中重复"Injector"注入,当你有很多服务要注入时,这可以节省很多space和头脑清醒基础 class,但在派生 class.
中并不多import { MyService } from './my.service';
import { FooService } from './foo.service';
import { Injector } from '@angular/core';
export class Base {
protected myService: MyService;
protected fooService: FooService;
constructor (protected injector: Injector) {
this.myService = injector.get(MyService);
this.fooService = injector.get(FooService);
}
}
export class Derived extends Base {
constructor(protected injector: Injector) {
super(injector);
}
}