AngularJS中“服务”一词的各种用法有何不同?

时间:2015-03-07 07:21:06

标签: angularjs angular-services

我正在学习AngularJS,我在开发者指南的三个不同地方看到了“服务”一词,这让我感到困惑。

一个。在Angular开发人员指南中,有一个section on services。它继续描述如何使用myModule.factory声明这些。

B中。在Angular开发人员指南中,有一个section on providers,它表示注入器服务“创建两种类型的对象,服务和专用对象。”它着手描述 5服务配方,其中之一是:

℃。 The service recipe

所以似乎 A 是一个冗余涵盖 C 的整个部分,它已经是 B 的一部分,它将服务描述为一种可能的服务类型。

我很困惑。为什么服务是一种服务?这只是选择不当的术语与冗余的文档相结合吗?为什么服务部分( A )涵盖了使用angular.factory创建服务,这是其他5种“服务类型”之一,还有服务?

2 个答案:

答案 0 :(得分:1)

简短回答:术语选择不当,造成混乱。来自official docs on providers

  

注意:是的,我们已经拨打了我们的服务配方之一' Service'。我们对此感到遗憾,并且知道我们会因为我们的错误而受到某种程度的惩罚。就像我们命名了我们的后代之一“孩子”一样。男孩,那会惹恼老师。

没有5种服务类型。实际上,您只有一种类型:提供商。他们让您提供服务。所有其他食谱都建立在此之上,并且只是为了让您的生活更简单(语法糖)而存在。例如,如果您要做的只是设置一个值并阅读它,那么基础"提供商"食谱会觉得有点冗长。这就是Angular的创建者让你使用.value的原因。

只是为了展示"服务配方"只是基本相同的变体,这是一个用.factory和.service配方写的服务。它们应该表现出完全相同的行为。

angular.module('myModule').factory('MyService', function(){
    var service = {};

    service.myFunc = function(){
        console.log('Hello there');
    };

    return service;
});

angular.module('myModule').service('MyService', function(){

    this.myFunc = function(){
        console.log('Hello there');
    };
});

我发现你使用的食谱往往归结为:

  • 你喜欢什么(例如编码风格,this vs对象)
  • 您需要能够在模块的配置阶段配置服务

答案 1 :(得分:0)

我同意这令人困惑,因为我们作为开发人员过度使用术语服务。我试图帮助你。

  • AngularJS注入器通过注册的配方创建了单独的JavaScript对象。这些是你问题中感官A和B的服务。用于注册它们的方法(提供者,工厂或服务)与从注射器获得的对象实际上无关。
  • AngularJS注入器通过简单地实例化现有的JavaScript类型来创建一种单独的JavaScript对象。这种对象是通过服务配方注册的。为什么这被称为服务配方,而不是现有的配方或其他东西,超出了我的范围。