这是一个AngularJS服务伪装成工厂吗?
我创建了一个可以重新用于数据访问的AngularJS工厂:
app.factory('abstractFactory3', function ($http) {
function abstractFactory3(odataUrlBase) {
this.odataUrlBase = odataUrlBase;
}
abstractFactory3.prototype = {
getList: function (odataOptions) {
return $http.get(this.odataUrlBase, {
params: odataOptions
});
},
get: function (id, odataOptions) {
return $http.get(this.odataUrlBase + '/' + id, {
params: odataOptions
});
},
insert: function (data) {
return $http.post(this.odataUrlBase, data);
},
update: function (id, data) {
return $http.put(this.odataUrlBase + '(' + id + ')', data);
},
remove: function (id) {
return $http.delete(this.odataUrlBase + '(' + id + ')');
}
};
return abstractFactory3;
});
阅读关于Angular服务,工厂和提供商之间差异的简短报告,基于这些定义,我对工厂的实际情况有些困惑。
综上所述:
服务 :提供了一个函数的实例。
工厂 :通过调用传递给module.factory的函数引用返回的值。
提供者 :提供了ProviderFunction()。$ get()。 构造函数在$ get方法被调用之前被实例化
要使用此工厂,它使用ODada路径进行初始化:
var dataFactory = new abstractFactory3("/odata/ContentType");
dataFactory.getList(odataParams)
.success(function (result) {
options.success(result);
})
.error (function (error) {
console.log("data error");
});
由于我正在创建abstractFactory3
,我现在提供了一个函数的实例(如服务)......初始化为我提供了一个函数 - 服务的实例,对吗? 但是,通过调用方法.get(), .getList(), .insert(), .update(), .remove()
来返回值。 被认为是类似于提供者的ProviderFunction().$get()
?
有人可以澄清这一点?
供应商,工厂和服务似乎比实际上更复杂。 每个都是另一个的专用版本,如果它满足您的需求,可以使用较少的代码完成相同的任务。
例如,如果您所返回的所有数据都是字面值,如数字或字符串,则可以使用值并在一行代码中完成。 你也可以通过工厂去连锁店,但是你会少写代码。
另一方面,如果想要根据从服务器获得的另一个值来计算值。 那么你不能使用价值做到这一点,因此你必须上一层到工厂。
如此等等链条上。 以下博客文章将详细介绍并给出几个示例:
http://www.simplygoodcode.com/2015/11/the-difference-between-service-provider-and-factory-in-angularjs/
这是一篇来自同一篇文章的高层图片,说明了我上面所说的内容:
工厂返回调用函数的结果 - 在你的情况下,它只是一个函数。 所以,当工厂注入时,它也只是一个功能。 这就是为什么你可以在你的函数被注入之后'新增'(就像你的例子)。 你是对的,这基本上是一种服务。
不,是一个提供程序。$ get与调用.getList(),.insert()等不同。提供程序。$ get的结果是由$ injector注入的。 对于工厂来说,这是调用工厂功能的结果。 对于服务而言,这是新服务构造函数的结果。
Provider。$ get更灵活 - 它可以返回任何你想要的(这意味着你可以注入任何你想要的)。
链接地址: http://www.djcxy.com/p/77695.html上一篇: Is this an AngularJS service masquerading as a factory?