1.什么是依赖注入?

依赖注入是一种编程模式,可以让类从外部源中获得它的依赖,不必亲自创建他们。

(这就达到了一个效果,我不知道我是怎么实现的,但我创建了一个实现他的接口,然后接口封装起来,1.可以分离关注。2.可以简化思路 3.可以语义更接近实际);

2.为什么需要依赖注入?

为了方便测试,分离关注的原则。

服务是个分离关注点,不同等级和类型的服务放在它自己的文件里。

3.实现的步骤?

1.配置注入器;

不需要创建Angular注入器。angular在启动过程中会自动创建一个应用级的注入器(就只最大的注入器)。

在main.ts里

platformBrowserDynamic().bootstrapModule(AppModule);

AppModule是最大的注入器,其他的注入在AppModule里先。

2.AppModule里注册提供商,也可以在组件中注册提供商;

@NgModule和@Component里存在着providers属性;通过它来注入一些提供商。选择哪一种取决于提供商的服务是给多大的范围内的组件使用;

3.在子元素的组件里边调用注入器提供的方法。

 import { Component }   from '@angular/core';
import { Hero } from './hero';
import { HeroService } from './hero.service';
@Component({
selector: 'hero-list',
template: `
<div *ngFor="let hero of heroes">
{{hero.id}} - {{hero.name}}
</div>
`
})
export class HeroListComponent {
heroes: Hero[];
constructor(heroService: HeroService) { //注意这里的引入方式和下一行的调用方式
this.heroes = heroService.getHeroes();
}
}

  备注:这段代码就会实现一个服务,这个服务的功能可以通过调用HeroService的getHeroes方法获得HEROES;虽然看起来并没有什么意义,但是还是会在语义上强大起来,而且想象以下代码量非常大的时候。服务只是一个类,在没有@injectable()之前它并没有任何特别之处。

最新文章

  1. 【转】PHP 杂谈《重构-改善既有代码的设计》之一 重新组织你的函数
  2. Spring Bean
  3. js加解密
  4. redirect和forward
  5. SpringMVC 部署项目静态资源文件访问问题
  6. UI第六节——UINavigationController 详解
  7. Centos 5.x/6.x 配置163网易yum源
  8. Centos python 2.6 升级到2.7.3
  9. ASP.NET MVC4中用 BundleCollection使用问题手记
  10. uvalive 4255 Guess(拓扑排序)
  11. Java中的局部变量表及使用jclasslib进行查看
  12. Word 2007 封面、目录和正文页码单独设置
  13. servlet(1)
  14. Bypass_Disable_functions_Shell
  15. FAQ常见问题解答---搭建hubot
  16. Vue非父子组件之间的传值
  17. Centos6.5网络配置
  18. java.lang.NoClassDefFoundError: com/sun/image/codec/jpeg/JPEGCodec 解决方案
  19. ASP.NET Core之项目文件简介及配置文件与IOC的使用
  20. Machine Learning CodeForces - 940F(带修改的莫队)

热门文章

  1. 关于spring java.lang.IllegalArgumentException: Name for argument type [java.lang.String] 的错误
  2. com.rabbitmq.client.ShutdownSignalException: channel error; protocol method: #method&lt;channel.close&gt;(reply-code=404, reply-text=NOT_FOUND - no queue &#39;springCloudBus.anonymous.6Xa99MDZTJyHKdPqMyoVEA&#39; in
  3. iOS之UIButton的normal和selected状态切换
  4. wifi共享大师,去除弹窗广告。
  5. atoi和itoa函数的实现方法
  6. codeforces 514E-Darth Vader and Tree
  7. Java(8)中List的遍历方式总结
  8. Python学习day42-数据库的基本操作(1)
  9. Luogu P4932 浏览器(二进制)
  10. Windows API 第三篇