gpt4 book ai didi

angular - 继承依赖注入(inject)

转载 作者:搜寻专家 更新时间:2023-10-30 21:16:42 27 4
gpt4 key购买 nike

我想创建一个通用的 api 服务,以便更容易创建与模型相关的服务:

export abstract class ModelService<T> {

constructor(protected apiService: ApiService) {
//ApiService is a service that wraps Http and adds signature , auth and serialization.
}

public getAll(): Observable<T[]> {
return this.apiService.get<T[]>(this.modelClass, this.baseUrl);
}
}

然后,我将创建管理模型 Foo 的服务:

@Injectabe()
export class FooService extends ModelService<Foo>{

}

但是当我调用 fooService.getAll().subscribe(...); 时,我收到一条错误消息,提示 apiService 未定义(无法获取属性 'get'未定义的)。

所以解决方法是在 FooService 中添加一个构造函数,如下所示:

constructor(api: ApiService) {
super(api);
}

但问题是它不是开发友好的,没有任何东西告诉你这样做,因为 FooService 扩展了 ModelService,它应该有相同的构造函数,因此有相同的依赖关系.

有什么方法可以继承依赖吗?

PS:我已经尝试将@Injectable()添加到ModelService,同样的错误。

编辑:tsconfig.json:

{
"compilerOptions": {
"baseUrl": "",
"declaration": false,
"emitDecoratorMetadata": true,
"experimentalDecorators": true,
"lib": [
"es6",
"dom"
],
"mapRoot": "./",
"module": "es6",
"moduleResolution": "node",
"outDir": "../dist/out-tsc",
"sourceMap": true,
"target": "es5",
"typeRoots": [
"../node_modules/@types"
]
}
}

package.json:

"dependencies": {
"@angular/common": "2.2.1",
"@angular/compiler": "2.2.1",
"@angular/core": "2.2.1",
"@angular/forms": "2.2.1",
"@angular/http": "2.2.1",
"@angular/platform-browser": "2.2.1",
"@angular/platform-browser-dynamic": "2.2.1",
"@angular/router": "3.2.1",
...
...
},
"devDependencies": {
"@angular/compiler-cli": "2.2.1",
...
...
}

最佳答案

构造函数需要重复依赖,然后使用super(...)传递给父类(super class)

@Injectabe()
export class FooService extends ModelService<Foo>{
constructor(apiService: ApiService) {
super(apiService);
//ApiService is a service that wraps Http and adds signature , auth and serialization.
}
}

这不是 Angular2 的要求或限制,这就是构造函数在 TypeScript 中的工作方式。

关于angular - 继承依赖注入(inject),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40972825/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com