说我有一个crudService.js文件:
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');
}
}
}]);
但后来我注意到在尝试使用 service 变量时,其属性设置为' a'。我做错了什么?
答案 0 :(得分:1)
第一次注入时缓存的角度服务are singletons:
Angular的所有服务都是单身人士。这意味着进样器最多使用一次配方来创建对象。然后,注射器会缓存该参考,以满足未来的所有需求。
genericCrudService
引用相同的服务,将其注入service
和actionService
个变量会导致两个变量genericCrudService
中都有service === actionService
个服务实例
如果某个服务仅在某些情况下应该获取新实例,则服务实例可能会获得一个返回该对象的新实例的方法(例如factory
或getInstance
):
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;
答案 1 :(得分:0)
你不能这样做,因为角度服务是一个单身人士...看看那个帖子它解释得很好;)Are Angularjs services singleton?
您还可以查看AngularJS: Service vs provider vs factory。也许你会找到一种方法来做你想做的事情;)