angular2使用构造函数

时间:2016-08-09 14:05:45

标签: angular types angular2-services

我在理解如何在angular2中正确扩展服务时遇到一些问题,可能是因为我不太了解如何在打字稿中扩展类。

SuperClass

@Injectable()
export class CallService{
    constructor(private errror:string){
        this.errMsg=errror;
    }
    private _errMsg:string;
    set errMsg(arg0:string){
        this._errMsg=arg0;
    }
    get errMsg():string{
        return this._errMsg;
    }
}

子类

@Injectable()
export class DownloadService extends CallService{
    constructor(private error:string,private http:Http){
        super(error)
    }
}

App.Component

@Component({
selector:'my-app',
    templateUrl:'app/app.component.html',
    styleUrls:['app/app.component.css'],
    directives:[ROUTER_DIRECTIVES,WaitComponent],
    providers:[DownloadService,SwitcherService,CallService,WaitService]
})
export class AppComponent{
    title:'App'
    constructor(
        private areadownloadservice:AreaDownloadService,
        private waitService:WaitService,
        private switcherservice:SwitcherService,
        private callService:CallService){}
    )
}

我想要做的是使用CallService扩展一些类,以便所有进行调用的类都有一个errMsg字符串属性来设置或获取,但是我得到了这个异常:

  

没有String的提供者!

我错过了什么?

2 个答案:

答案 0 :(得分:4)

你可以

  • 删除error参数

  • 使error参数可选

export class CallService{
    constructor(@Optional() private errror:string){

...

export class DownloadService extends CallService{
    constructor(@Optional() private error:string,private http:Http){
  • 或告诉DI应该通过什么
bootstrap(AppComponent, [HTTP_PROVIDERS, {provide: 'someToken', useValue: 'someStringValue'}])
export class CallService{
    constructor(@Inject('someToken') private errror:string){

...

export class DownloadService extends CallService{
    constructor(@Inject('someToken') private error:string,private http:Http){

您也可以使用OpaqueToken代替字符串键('someToken') 另请参阅http://blog.thoughtram.io/angular/2016/05/23/opaque-tokens-in-angular-2.html

答案 1 :(得分:2)

在这行代码constructor(private error:string,private http:Http){中,您告诉构造函数实际准备Httpstring服务,但您没有声明这样的string服务任何地方。