【2019-11-20】服务与DI简介

DI -- dependency injection

当Angular创建组件类的新实例时,它会通过查看该组件类的构造函数,来决定该组件依赖哪些服务或者其他依赖项 ,比如上面的heroService

当Angular发现某个组件依赖某个服务时,它会首先坚持是否该注入器中已经有了那个服务的任何现有实例。如果所请求的服务尚不存在,注入器会使用以前注册的服务提供商制作一个,并把它加入注入器中,然后把该服务返回给Angular

当所有请求的服务已解析并返回时,Angular可以用这些服务实例为参数,调用该组件的构造函数

提供服务

对于要用到的任何服务,你必须至少注册一个提供商。

①服务可以在自已的元数据中把自已注册为提供商,这样可以让自已随处可用

在根一级提供服务时,Angular会创建一个单一的共享实例,并且把它注入到任何想要它的类中。这种在@Injectable元数据注册提供商的方式还可以让angular能够通过移除那些从未被用过的服务来优化大小

②可以在特定的模块注册提供商,该服务的同一个实例将会对该NgModule中的所有组件可用

③也可以在组件级注册提供商,你会为该组件的每一个新实例提供该服务的一个新实例

原文地址:https://www.cnblogs.com/QQ-lala/p/11896783.html