AngularJS:工厂和服务?

这个问题在这里已经有了答案:

  • AngularJS:服务vs提供者vs工厂30个答案

  • 服务工厂


    在这里输入图像描述在这里输入图像描述

    工厂和服务之间的区别就像功能和对象之间的区别

    工厂提供商

  • 给我们函数的返回值,即。 您只需创建一个对象,为其添加属性,然后返回相同的对象。当您将此服务传递到您的控制器时,对象上的这些属性现在将通过您的工厂在该控制器中可用。 (假设情景)

  • 单身人士,只会被创建一次

  • 可重复使用的组件

  • 工厂是控制器之间进行通信的好方法,如共享数据。

  • 可以使用其他依赖项

  • 通常在服务实例需要复杂的创建逻辑时使用

  • 不能在.config()函数中注入。

  • 用于不可配置的服务

  • 如果您使用的是对象,则可以使用工厂提供者。

  • 语法: module.factory('factoryName', function);

  • 服务提供者

  • 给我们一个函数的实例(对象) - 您刚刚使用'new'关键字实例化,并且您将向'this'添加属性,服务将返回'this'。当您将服务传递到控制器时,这些属性通过你的服务现在可以在该控制器上使用'this'。 (假设情景)

  • 单身人士,只会被创建一次

  • 可重复使用的组件

  • 服务用于控制器之间的通信以共享数据

  • 您可以使用this关键字将属性和函数添加到服务对象

  • 依赖项被注入为构造函数参数

  • 用于简单的创建逻辑

  • 不能在.config()函数中注入。

  • 如果您使用的是课程,则可以使用服务提供商

  • 语法: module.service('serviceName', function);

  • 示例演示

    在下面的例子中,我定义了MyServiceMyFactory 。 请注意在.service如何使用this.methodname.创建服务方法this.methodname..factory我创建了一个工厂对象并为其分配了方法。

    AngularJS .service


    module.service('MyService', function() {
    
        this.method1 = function() {
                //..method1 logic
            }
    
        this.method2 = function() {
                //..method2 logic
            }
    });
    

    AngularJS。工厂


    module.factory('MyFactory', function() {
    
        var factory = {}; 
    
        factory.method1 = function() {
                //..method1 logic
            }
    
        factory.method2 = function() {
                //..method2 logic
            }
    
        return factory;
    });
    

    也看看这个美丽的东西

    对服务和工厂感到困惑

    AngularJS工厂,服务和提供商

    Angular.js:服务vs提供者vs工厂?


    FactoryServiceprovider一个包装。

    Factory可以返回任何可以是class(constructor function)instance of classstringnumberboolean 。 如果你返回一个constructor函数,你可以在你的控制器中实例化。

     myApp.factory('myFactory', function () {
    
      // any logic here..
    
      // Return any thing. Here it is object
      return {
        name: 'Joe'
      }
    }
    

    服务

    服务不需要返回任何东西。 但是你必须在this变量中分配一切。 因为服务将默认创建实例并将其用作基础对象。

    myApp.service('myService', function () {
    
      // any logic here..
    
      this.name = 'Joe';
    }
    

    实际的angularjs代码在服务后面

    function service(name, constructor) {
        return factory(name, ['$injector', function($injector) {
            return $injector.instantiate(constructor);
        }]);
    }
    

    它只是factory周围的包装。 如果你从service返回一些东西,那么它的行为就像Factory

    IMPORTANT :Factory和Service的返回结果是缓存,所有控制器都会返回相同的结果。

    我应该什么时候使用它们?

    在所有情况下, Factory最为可取。 当你有需要在不同控制器中实例化的constructor函数时,可以使用它。

    Service是一种Singleton对象。 对于所有控制器,来自服务的对象返回将相同。 当您希望为整个应用程序提供单个对象时,可以使用它。 例如:经过验证的用户详细信息。

    为了进一步理解,请阅读

    http://iffycan.blogspot.in/2013/05/angular-service-or-factory.html

    http://viralpatel.net/blogs/angularjs-service-factory-tutorial/


  • 如果您使用服务,您将获得函数的实例(“this”关键字)。
  • 如果您使用工厂,您将获得通过调用函数引用(工厂中的return语句)返回的值
  • 工厂和服务是最常用的食谱。 它们唯一的区别在于,Service配方对自定义类型的对象更好,而Factory可以生成JavaScript基元和函数。

    参考

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

    上一篇: AngularJS : Factory and Service?

    下一篇: What is the difference between angular