加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

Angular 2中Component装饰器和NgModule装饰器的提供者之间的区别

发布时间:2020-12-17 07:59:32 所属栏目:安全 来源:网络整理
导读:提供者组件装饰器数组 @Component({ moduleId: module.id,selector: 'hero-list',templateUrl: './hero-list.component.html',providers: [ HeroService ] }) export class HeroListComponent implements OnInit { /* . . . */ } 提供者NgModule装饰器数组 @
提供者组件装饰器数组
@Component({
    moduleId: module.id,selector:    'hero-list',templateUrl: './hero-list.component.html',providers:  [ HeroService ]
 })
 export class HeroListComponent implements OnInit {
    /* . . . */
 }

提供者NgModule装饰器数组

@NgModule({
  imports:      [ BrowserModule ],providers:    [ Logger ],declarations: [ AppComponent ],exports:      [ AppComponent ],bootstrap:    [ AppComponent ]
})

Angular2中这两个提供程序数组有什么区别?

不同之处在于提供程序可用的范围以及将创建的实例数.

每个提供商的实例

如果将它添加到组件中,则此组件的每个实例都将拥有自己的服务实例,而对于非延迟加载的模块,整个应用程序只有一个实例.

范围

如果将其添加到组件,则只应用组件和指令,并且此组件的后代将能够注入实例.

分层注入和提供者查找

当组件注入服务时,DI通过检查组件提供程序,然后检查其父级以及其他祖先来查找它,直到找到匹配的提供程序.如果在到达根组件(AppComponent)时找不到它,则查看应用程序根范围(@NgModule()).

懒加载的模块

延迟加载的模块有自己的“根”范围.这是因为一旦初始化并且最初没有惰性模块,就不能修改注入器的提供者.因此,延迟加载的模块的提供者将不会全局可用,仅在延迟加载的模块的范围内.为了解决这个限制,引入了Root()(主要是约定而不是某些特性)来在根目录中注册提供者,同时保持导入模块的其余部分是惰性的.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读