我正在尝试学习 Angular2,但遇到了一些麻烦。我有一个名为 ParentService
export abstract class ParentService {
}
以及另一个扩展 ParentService
的 Service 类,称为 ChildService
export class ChildService extends ParentService {
}
然后我有一个名为 input.component
import { Component } from "@angular/core";
import { ParentService } from "./service/parent.service";
@Component({
selector: 'app-input',
templateUrl: './input.component.html'
})
export class InputComponent {
constructor(private parentService: ParentService) {}
}
在我的 app.component
中,我提供了 ChildService 的一个实例
import { Component } from '@angular/core';
import { ChildService } from './service/child.service';
@Component({
selector: 'app-root',
templateUrl: './app.component.html',
styleUrls: ['./app.component.css'],
providers: [ChildService]
})
export class AppComponent {
}
但是,这不起作用。它构建得很好,但是当运行该应用程序时,我得到了一个 错误:
EXCEPTION: Error in ./AppComponent class AppComponent - inline template:4:16 caused by: No provider for ParentService!
这可以做到吗?我只想让 input.component
知道 ParentService
。我真的不想让它知道实现情况。
最佳答案
你不能指望 Angular2 会像这样自动将子类连接到原始类声明。如果您有 2 个子类 DogService
和 CatService
,它们都继承 providers
列表中声明的 AnimalService
,哪一个子类应该使用吗?
相反,您需要明确指定它:
providers: [{provide: ParentService, useClass: ChildService}]
文档:https://angular.io/docs/ts/latest/guide/dependency-injection.html
关于javascript - 服务和提供者的继承和多态性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42127409/