打字稿/角度4:注入服务和初始化为新类有什么区别?

时间:2017-09-16 15:24:29

标签: angular typescript

我想知道这两个例子之间的区别是什么:

export class EditorComponent {

  constructor(
      public _entryService: EntryService
  ){
      console.log(this._entryService.entryData.properties);
   }

}
export class EditorComponent {

  _entryService;

  constructor(){
     this._entryService = new EntryService;
     console.log(this._entryService.entryData.properties);
  }

}

两者之间是否存在实际差异?

我预计在这里我对基础理论的认识可能会有一些差距 - 任何能帮助我教育自己的方向的指针都会受到赞赏 - 谢谢!

1 个答案:

答案 0 :(得分:2)

this._entryService = new EntryService的等价物是组件定义中的提供者:

@Component({ ..., providers: [EntryService] })
export class EditorComponent {
  constructor(
      public _entryService: EntryService
  ){}
}

这将为每个组件实例创建新的EntryService实例。

如果没有提供者属于组件注入器,它将从父注入器(可能是根注入器)中检索,并将生成EntryService提供者的单个实例:

@Component({ ..., providers: [] })
export class EditorComponent {
  constructor(
      public _entryService: EntryService
  ){}
}

唯一需要new EntryService的情况是类构造函数接受非DI参数(如this example中所示)。