angular2依赖注入概述
学习笔记
1.依赖注入要解决的问题
在需要一个对象的时候我们通常的方法是现将这个对象实例化,再将实例化后的对象作为一个参数传递给调用对象的函数,但是如果一个函数需要调用多个对象,也就是依赖多个对象的时候,就需要实例化多个对象之后将实例化之后的对象当做参数传递给函数。这样我们就需要实例化大量的对象。能不能有一种方法让我们不用实例化那么多对象,我的函数需要什么参数,就给我什么参数呢?这个时候就产生了依赖注入机制,依赖注入将我们需要的参数注入到当前页面,当函数需要的时候就直接调用参数即可,函数依赖谁就调用谁,前提是函数依赖的对象已经注入。
2.与此同时又另外一个名词:控制反转:Inversion of Control简称IOC;依赖注入:Dependency Injection简称DI
控制反转将依赖的控制权由代码的内部转到了代码的外部。依赖注入和控制反转其实是一体两面:只不过控制反转强调的是目的,目的就是将依赖的控制权从代码的内部转到代码的外部。而依赖注入强调的是手段,如何实现控制反转,就是依赖注入。angular2实现控制反转的机制就是依赖注入。
3.依赖注入的好处
a.可以提高代码的松耦合性和代码的可重用性.当使用依赖注入之后同一个组件根据不同的情况依赖不同的service的时候就可以在需要用到组件的地方引入组件,同时在不同的也面注入不同的service。达到了组件的可重用性。同时同一个service被不同的组件需要时也可以注入到不同的组件当中。
例如以下代码:
当组件需要一个service 的时候我们可以在这个页面的providers里面用provide注册一个类型为ProviderService的Token值:provider:ProviderService,当组件或者指令声明自己需要一个类型为ProviderService的时候,实例化一个AnotherProductService,并将其注入到目标对象。
那么,组件和指令怎么声明自己需要的token类型呢?只需要在组件或者指令的构造函数里面将需要的Token类型赋给一个变量。productService:ProviderService.当组件声明自己需要的token类型之后就会去providers里面寻找该Token对应的服务。
当在构造函数里面 ,实例化一个Token时,这个服务会根据Token的名字去找到这个token对应的服务来实例化。token的名字可以是一样的,但是token对应的服务可以是不一样的。提供器里面提供的服务就是token的名字。
用法:
1.ng g service aa/product 在aa文件夹下创建一个叫product的service
2.编写模块module
3.编写对应的component组件
4.编写模板显示数据
效果:
更复杂的。在组件里面注入服务
创建另一个服务
在组件注入服务
模板和之前一样,效果也一样就是获取的值不一样而已、
在服务里面注入服务
创建一个服务
在服务里面注入服务