我想學習Angular2,但有點麻煩。我有一個名爲ParentService
服務和提供商的遺傳和多態性
export abstract class ParentService {
}
抽象服務類和擴展ParentService
另一個服務類稱爲
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
。我真的不希望它知道實施。
你應該避免這種模式 –
@AluanHaddad你可以詳細說明爲什麼它會是壞的? – eric
在任何語言,尤其是JavaScript中,繼承都應該保持在最低水平。由於JavaScript缺乏接口,而TypeScript接口是結構化的,我看到很多人試圖將類用作接口。這是一個可怕的做法。你應該編程接口,而不是實現。即使在缺乏清晰界面的語言中也是如此。 –