提供者组件装饰器的数组
@Component({
moduleId: module.id,
selector: 'hero-list',
templateUrl: './hero-list.component.html',
providers: [ HeroService ]
})
export class HeroListComponent implements OnInit {
/* . . . */
}
Run Code Online (Sandbox Code Playgroud)
提供者NgModule装饰器数组
@NgModule({
imports: [ BrowserModule ],
providers: [ Logger ],
declarations: [ AppComponent ],
exports: [ AppComponent ],
bootstrap: [ AppComponent ]
})
Run Code Online (Sandbox Code Playgroud)
Angular2中这两个提供程序数组有什么区别?
不同之处在于提供程序可用的范围以及将创建的实例数.
每个提供商的实例
如果将它添加到组件中,则此组件的每个实例都将拥有自己的服务实例,而对于非延迟加载的模块,整个应用程序只有一个实例.
范围
如果将其添加到组件,则只应用组件和指令,并且此组件的后代将能够注入实例.
分层注入和提供者查找
当组件注入服务时,DI会通过检查组件提供程序,然后检查其父级以及其他祖先来查找它,直到找到匹配的提供程序.如果在到达根组件(AppComponent)时找不到它,则查看应用程序根范围(@NgModule()).
懒加载的模块
延迟加载的模块有自己的"根"范围.这是因为一旦初始化并且最初没有惰性模块,就无法修改注入器的提供者.因此,延迟加载的模块的提供者将不会在全局中可用,仅在延迟加载的模块的范围内.为了解决这个限制forRoot(),我们引入了(主要是约定而不是某些特性)来在根目录中注册提供程序,同时保持导入模块的其余部分是惰性的.
| 归档时间: |
|
| 查看次数: |
1363 次 |
| 最近记录: |