javascript - 服务和提供者的继承和多态性

标签 javascript angular typescript

我正在尝试学习 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 个子类 DogServiceCatService,它们都继承 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/

相关文章:

javascript - 如何对AJAX请求返回的JSON格式数据进行排序?

javascript - 关于延迟加载样式表的 Highcharts 图表宽度问题

angular - 如何从指令中获取 Angular View 层次结构?

javascript - 用于在对象之间绘制线条的 Angular 库

typescript - 在 Typescript 中使用 '--strictFunctionTypes' 有什么好处?

javascript - 使用 React 或 jQuery 创建 DOMNode 以传递给谷歌地图 API

javascript - Ajax 发布到 JSP 不会重定向

json - Angular Json 管道类型错误 : Converting circular structure to JSON

TypeScript - 处理动态属性更新中的类型

javascript - 如何为动态制作的复选框列表制作撤消按钮