这是一个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/

这是一篇来自同一篇文章的高层图片,说明了我上面所说的内容:

AngularJS中的提供者,服务和工厂都是一样的


工厂返回调用函数的结果 - 在你的情况下,它只是一个函数。 所以,当工厂注入时,它也只是一个功能。 这就是为什么你可以在你的函数被注入之后'新增'(就像你的例子)。 你是对的,这基本上是一种服务。

不,是一个提供程序。$ get与调用.getList(),.insert()等不同。提供程序。$ get的结果是由$ injector注入的。 对于工厂来说,这是调用工厂功能的结果。 对于服务而言,这是新服务构造函数的结果。

Provider。$ get更灵活 - 它可以返回任何你想要的(这意味着你可以注入任何你想要的)。

链接地址: http://www.djcxy.com/p/77695.html

上一篇: Is this an AngularJS service masquerading as a factory?

下一篇: Page not found while reload page during # removal