angular自定义服务factory和service源码解析
来源:互联网 发布:佛道区别知乎 编辑:程序博客网 时间:2024/05/20 16:45
控制器膨胀
控制器是AngularJS的肉和土豆,一不小心就会将过多的逻辑加入其中,尤其是刚开始的时候。控制器永远都不应该去操作DOM,或是持有DOM选择器,那是我们需要使用指令和ng-model的地方。同样的,业务逻辑应该存在于服务中,而非控制器。
数据也应该存储在服务中,除非它们已经被绑定在$scope上了。服务本身是单例的,在应用程序的整个生命周期都存在,然而控制器在应用程序的各状态间是瞬态的。如果数据被保存在控制器中,当它被再次实例化时就需要重新从某处获取数据。即使将数据存储于localStorage中,检索的速度也要比Javascript变量慢一个数量级。
AngularJS在遵循单一职责原则(SRP)时运行良好,如果控制器是视图和模型间的协调者,那么它所包含的逻辑就应该尽量少,这同样会给测试带来便利。
5. Service vs Factory
几乎每一个AngularJS开发人员在初学时都会被这些名词所困扰,这真的不太应该,因为它们就是针对几乎相同事物的语法糖而已!
以下是它们在AngularJS源代码中的定义:
从源代码中你可以看到,service仅仅是调用了factory函数,而后者又调用了provider函数。事实上,AngularJS也为一些值、常量和装饰提供额外的provider封装,而这些并没有导致类似的困惑,它们的文档都非常清晰。
由于service仅仅是调用了factory函数,这有什么区别呢?线索在$injector.instantiate:在这个函数中,$injector在service的构造函数中创建了一个新的实例。
以下是一个例子,展示了一个service和一个factory如何完成相同的事情:
当helloWorldService或helloWorldFactory被注入到控制器中,它们都有一个hello方法,返回”hello world”。service的构造函数在声明时被实例化了一次,同时factory对象在每一次被注入时传递,但是仍然只有一个factory实例。所有的providers都是单例。
既然能做相同的事,为什么需要两种不同的风格呢?相对于service,factory提供了更多的灵活性,因为它可以返回函数,这些函数之后可以被新建出来。这迎合了面向对象编程中工厂模式的概念,工厂可以是一个能够创建其他对象的对象。
这里是一个控制器示例,使用了service和两个factory,helloFactory返回了一个函数,当新建对象时会设置name的值。
在初学时,最好只使用service。
Factory在设计一个包含很多私有方法的类时也很有用:
通过这个例子,我们可以让privateFactory的公有API无法访问到privateFunc方法,这种模式在service中是可以做到的,但在factory中更容易。
- angular自定义服务factory和service源码解析
- angular的service服务和factory服务
- angular--自定义服务--在多个控制器中传递参数factory+service+provider
- angularJs-自定义服务(service,factory,provide)和使用
- angular中的factory、service和provider
- angular:service、factory、provider使用和区别
- angular中service和factory区别
- angular服务和自定义服务
- Angular 服务和自定义服务
- Angular Provider Factory Service
- angular-factory-service
- angular 服务(factory service constant value provider)学习笔记
- angular的常用的三种服务 service,factory,provider
- 《AngularJS》------自定义服务 provider、service、factory
- angularJs自定义服务(factory,service,provider)
- 自定义服务详解(factory、service、provider)
- angular中的$http服务(service)解析
- angular js factory服务
- 最大连续子序列和
- 协议森林03 IP接力赛 (IP, ARP, RIP和BGP协议)
- 进程学习:1-进程、进程组、作业、会话、控制终端详解
- 数学之美番外篇:平凡而又神奇的贝叶斯方法
- Java2_J2EE体系架构
- angular自定义服务factory和service源码解析
- Part 72 - HandleError attribute in mvc
- oj第十一周训练——判断三角形
- 加速maven jar包, pom下载速度 - aliyun Maven仓库
- Javascript的方法可以分为三类
- Android中直播视频技术探究之---基础核心类ByteBuffer解析
- c语言图形打印 12345
- JS的浮点数计算精度丢失问题解决方案
- 微信小程序开发教程(基础篇)7-数据绑定上