Angular service, 服务
早上开车上班, 发现车快没油了, 于是拐进加油站. 有一辆出租车也在加油..
Angular service在一个应用里是以单例形式存在的. 这个单例的实例是由service factory(service工厂)创建的.
- 加油, 就好比是一个 Angular service;
- 不论是我加的油, 还是出租车加的油, 都是从这个加油站同一个地下油罐取出来的同样的汽油. 大家使用的都是同一个汽油实例(单例);
- 我的车与出租车共享了加的汽油的属性, 比如: 都是93#汽油, 掺水的比例, ...
因此, 在Angular里, 如下情况会考虑使用service:
- 可重用的, 纯业务逻辑的代码, 与$scope无关的代码可以被写成service. DRY.
- 用service共享数据, 因为在应用中, 对service的依赖都是引用同一个service实例
- ...
------
开头写到 service 是由 service factory(是一个函数) 所创建, service factory 就好比上图的那2个油桶.
在Angular体系中, service factory 又是由 service provider(是构造函数) 所创建, service provider 就好比这个加油站.
设想如果加油站很大, 必须有一个指路牌, 标识出在哪儿加93#汽油. service provider 函数必须包含名为 $get 的属性, 它指向 service factory 函数. 就好比, $get 这个路标指示我们在哪儿找到93#加油点.
Angular 提供了5个创建service的方法, 由繁到简, 或具有特殊功能
- .provider(provider)
- .constant(obj)
- .value(obj)
- .factory(fn)
- .service(class)
主要相比较的为 provider(), factory(), service() 3个函数.
用它们定义service时, 写法各不相同.
最终实例化的方式也不同.
provider() 好比整个加油站, 可配置性强, 程序员可以尽情发挥..
factory(), service() 次之, 哪里需要哪里搬, 定义简单,
----
var provider = function() { this.$get = function factory() { } }