早上开车上班, 发现车快没油了, 因而拐进加油站. 有一辆出租车也在加油..
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() {
}
}