创建服务
Angular提供了几种有用的服务,对于所有的应用来说,你将会发现这些服务对于创建你自己的服务是有用处的。为了创建自己的服务,你应该从通过一个模块(module)注册一个服务工厂方法开始(可以使用Module#factory api或者直接使用模块配置方法中的$provide api)。
所有的Angular服务通过使用在一个命名(id)下的Angular DI(依赖注入)系统来注册它们自己以参与到依赖注入中,就像声明的依赖需要提供给注册服务的工厂方法一样。
注册服务
为了注册一个服务,你必须有一个模块(你要注册的服务将会是这个模块的一部分)。换句话说,你可以注册带有通过Module Api或在模块配置方法中使用$provide服务的模块的服务。例如:
注意:你不是在注册一个服务实例,而是工厂方法将会在创建服务实例的时候被调用。
依赖
服务不仅仅可以被依赖,还可以有它们自己的依赖。这些依赖能够被作为工厂方法的参数指定。(阅读更多)
接下来是一个非常简单的例子。这个服务依赖$window服务并且仅仅是一个方法。这个服务简单的存储所有的通知;在第三个后,服务展示window警告的所有通知。
参考:
实例化Angular服务
在Angular中所有的服务使用消极的实例化方式。这意味着一个服务仅当它被需要实例化一个服务或被一个应用组件依赖的时候被创建。另一方面,除非服务被应用直接或间接注册,Angular将不会实例化服务。
单例模式的服务
最后,意识到所有的Angular服务是应用程序内唯一是重要的。这意味着,在每一个注射器中仅仅有一个被给予的服务的实例。由于Angular是“极度讨厌”全局状态的,创建多个注射器是可能的,每一个注射器有它自己的服务实例,但是这是非常稀少的。