2016-07-25 61 views
0

说我有一个crudService.js文件:如何注入模块的2个不同的实例中AngularJs

crudService.module('genericCrudService', ['$http', '$log', 'config', function ($http, $log, config) { 
     .... 
     return { 
      setSomeAttribute: function(m) { 
       // set attribute 
      } 
     } 
    }]); 

然后,我有需要不同的配置这个CRUD服务的实例模块:

module.factory('Task', ['genericCrudService','genericCrudService', function (service, actionService) { 
     ... 
     return { 
      init: function(p) { 
       service.setSomeAttribute('a'); 
       actionService.setSomeAttribute('b'); 
      } 
     } 
    }]); 

但后来我发现当试图使用服务变量时,它的属性被设置为'a'。我究竟做错了什么?

+0

真不明白你正在尝试做的或者正在 – charlietfl

+0

正如其他人所说,这些服务是什么样的期望单身设计,并且通过采用这种模式,它可以在模块中实现强大的通信方法。例如,您可以将服务注入到一个控制器中,订阅事件,存储数据或更改服务和其他控制器上的变量,以便访问该数据或触发事件。在Angular 2中,这是您的组件之间进行通信的手段,因为范围已经消失。我相信无论你需要做什么,仍然可以用单身完成,你只需要重新思考你的方法。 – Zach

回答

1

角服务are singletons这是在第一次注射缓存:

所有服务角是单身。这意味着注射器至多使用每个配方一次来创建对象。喷油器然后缓存所有未来需求的参考。

genericCrudService是指相同的服务,在具有两个变量genericCrudService服务,service === actionService实例注入它作为serviceactionService变量的结果。

如果某个服务应只在某些情况下,得到一个新的实例,服务实例可以得到一个方法,它返回对象的新实例(例如factorygetInstance):

app.factory('service',() => { 
    function Service() { 
     this.method = ...; 
     this.factory =() => new Service; 
    } 

    return new Service; 
    }); 

    ... 
    var serviceInstance = service.factory(); 

如果一个服务应该得到无处不在的新实例,它应该返回工厂或构造函数,将手动实例:

app.factory('Service',() => function() { 
    this.method = ...;  
    }); 

    ... 
    var serviceInstance = new Service; 
相关问题