[关闭]
@bornkiller 2014-08-31T12:37:59.000000Z 字数 1172 阅读 2682

浅析Angularjs Provider使用

angularjs


前言

在angular中,声明service有五种方式:

其中,value(), constant()主要用于定义常量,以在多控制器间共享。service()第二个参数为一个构造函数,生成单例时会直接使用new操作符。factory()会直接调用providerFunction,该函数返回值即为service。

声明service

  1. angular.module('animals',[])
  2. .factory('cat', ['$log',function ($log) {
  3. return {
  4. say: function() {
  5. $log.info('miaow miaow');
  6. }
  7. };
  8. }])
  9. .factory('dog', ['$log',function ($log) {
  10. return {
  11. say: function() {
  12. $log.info('woof woof');
  13. }
  14. };
  15. }])

这里声明了cat, dog两个service,当需要向别人介绍猫时,就加载cat service,调用say方法。当需要向别人介绍狗时,就加载dog service,并调用say方法。每种动物都需要一个service,都需要实现一个say方法。

provider

如果同时需要介绍多种动物,只能通过多个service实现。假设同时只介绍一种动物(SPA),只会加载一个service,其它service都不会使用,但代码除了叫声不同,其它都完全相同,无疑造成大量的代码冗余。这种情况,就需要使用provider。

  1. angular.module('animals',[])
  2. .provider('animal', function () {
  3. var specificVoice = null;
  4. this.voice = function(voice) {
  5. if (angular.isDefined(voice)) {
  6. specificVoice = voice;
  7. return this;
  8. } else {
  9. return specificVoice;
  10. }
  11. }
  12. this.$get = ['$log',function ($log) {
  13. return {
  14. say: function() {
  15. $log.info(specificVoice);
  16. }
  17. };
  18. }]
  19. })
  1. angular.module('xxx',['xxx'])
  2. config(['animalProvider', function (animalProvider) {
  3. animalProvider.voice('woof woof');
  4. }])
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注