提供者和模块子项

时间:2016-06-16 16:06:57

标签: angular

我不明白为什么我需要在父组件中设置提供程序,如果我将稍后将其作为服务导入子组件中。

这是服务:

import { Injectable } from '@angular/core';

@Injectable()
export class AService {
 doSomething(){
    return 'i am a service';
 }
}

这是父母:

import { Component } from '@angular/core';
import { AService }  from './a-service';
import { ChildComponent }  from './child.component';

@Component({
  selector: 'my-parent',
  directives: [ChildComponent],
  providers:[AService],
  template:'<my-child></my-child>'
})

export class ParentComponent{ }

angular2文档说:link here

  

仔细查看@Component元数据的提供者部分。 HeroService的一个实例现在可以在这个HeroesComponent及其所有子组件中注入。

但是,在子组件的定义中,无论如何我都需要导入服务。如果我不这样做,它会崩溃:

import { Component } from '@angular/core';
import { AService }  from './a-service';

@Component({
  selector: 'my-child',
  template:'<p> this is the {{service_returned_data}}'
})

export class ChildComponent{ 
  constructor(private _service: AService){}
  service_returned_data=_service.doSomething();
}

有人能解释一下这个意思吗?

1 个答案:

答案 0 :(得分:2)

提供者和导入是两个完全不同的概念。

  • 提供商在您的注入器树中定义服务的实例范围(类似于组件和指令的结构)

    < / LI>
  • 在整个应用程序中唯一导入识别类型静态类型检查,自动完成和Angulars DI使用构造函数参数的类型信息作为查找提供程序以获取实例并传递它的关键到构造函数。