实例化角的工厂n次。
示例:
app.factory('FooService', function(){
return {
hello: function() {
return "hello foo first";
}
}
});
app.factory('FooService', function(){
return {
hello: function(){
return "hello foo second";
}
}
});第二个服务将覆盖http://plnkr.co/edit/FNqDdH5w5ArbJEBsgsLc?p=preview上的第一个演示。
这个例子只是为了说明这个问题,但是现实世界的问题是不同的开发人员用相同的名称定义了服务,这使得很难排除故障。
什么是正确的方法处理复制的工厂在安古拉杰?(或容易预防或发现)
发布于 2014-07-08 22:55:00
我不知道什么是正确的方法,但是您可以问injector是否存在特定的服务。
var myModule = angular.module('myModule', [])
.factory('test', function () {
return { test: 'test' };
});
var injector = angular.injector(['myModule']);
console.log(injector.has('test')); //true还请注意,服务必须是在注入器检索之前定义的,这意味着您不应该尝试缓存injector,只需每次查询它。
发布于 2014-07-08 22:42:10
这是装潢工的完美用例。
解码器 服务装饰器拦截服务的创建,允许它覆盖或修改服务的行为。装饰器返回的对象可以是原始服务,也可以是替换或包装并委托给原始服务的新服务对象。
如何使用:
app.config(function($provide) {
$provide.decorator('FooService', FooServiceDecorator);
function FooServiceDecorator($delegate) {
$delegate.hello = function() {
return "hello foo second";
};
return $delegate;
}
});示例
https://stackoverflow.com/questions/24642424
复制相似问题