AngularJS 中术语 "services" 的各种用法有何区别?
What are the differences between various uses of the term "services" in AngularJS?
我正在学习 AngularJS,我看到 "service" 这个术语在开发人员指南的三个不同地方使用,这让我有点困惑。
一个。在 Angular 开发人员指南中,有一个 section on services。它继续描述如何使用 myModule.factory
.
声明这些
乙。在 Angular 开发人员指南中,有一个 section on providers,它说注入器 service "creates two types of objects, services and specialized objects." 它继续描述 5 个服务食谱,其中之一是:
所以看起来 A 是一个冗余覆盖 C 的整个部分,它已经是 B[ 的一部分=37=],将服务描述为一种可能的服务类型。
我很困惑。为什么服务是一种服务?这只是选择不当的术语与冗余文档相结合吗?为什么服务部分 (A) 涵盖使用 angular.factory
创建服务,它是其他 5 个 "types of service" 之一,与服务一起?
我同意这令人困惑,因为我们作为开发人员过度使用了服务一词。这是我试图帮助你的。
- AngularJS 注入器通过已注册的配方创建了单例 JavaScript 对象。这些是您问题中 A 和 B 方面的服务。用于注册它们(提供者、工厂或服务)的配方与您从注入器获得的对象无关。
- 一种单例 JavaScript 对象是由 AngularJS 注入器通过简单地实例化现有的 JavaScript 类型来创建的。这种对象是通过服务配方注册的。为什么这被称为服务配方,而不是现有类型配方或其他东西,我无法理解。
简答:术语选择不当,造成混淆。来自 official docs on providers:
Note: Yes, we have called one of our service recipes 'Service'. We regret this and know that we'll be somehow punished for our misdeed. It's like we named one of our offspring 'Child'. Boy, that would mess with the teachers.
没有5种服务类型。实际上,您只有一种类型:提供者。他们让你提供服务。所有其他的食谱都建立在这个之上,并且只是为了让你的生活更简单(语法糖)。例如,如果您只想设置一个值并读取它,那么基础 "provider" 配方会感觉有点冗长。这就是 Angular 的创建者让您使用 .value 的原因。
只是为了说明,"Service recipes" 只是基本相同事物的变体,这里是用 .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 对象)
- 您需要能够在模块的配置阶段配置您的服务
我正在学习 AngularJS,我看到 "service" 这个术语在开发人员指南的三个不同地方使用,这让我有点困惑。
一个。在 Angular 开发人员指南中,有一个 section on services。它继续描述如何使用 myModule.factory
.
乙。在 Angular 开发人员指南中,有一个 section on providers,它说注入器 service "creates two types of objects, services and specialized objects." 它继续描述 5 个服务食谱,其中之一是:
所以看起来 A 是一个冗余覆盖 C 的整个部分,它已经是 B[ 的一部分=37=],将服务描述为一种可能的服务类型。
我很困惑。为什么服务是一种服务?这只是选择不当的术语与冗余文档相结合吗?为什么服务部分 (A) 涵盖使用 angular.factory
创建服务,它是其他 5 个 "types of service" 之一,与服务一起?
我同意这令人困惑,因为我们作为开发人员过度使用了服务一词。这是我试图帮助你的。
- AngularJS 注入器通过已注册的配方创建了单例 JavaScript 对象。这些是您问题中 A 和 B 方面的服务。用于注册它们(提供者、工厂或服务)的配方与您从注入器获得的对象无关。
- 一种单例 JavaScript 对象是由 AngularJS 注入器通过简单地实例化现有的 JavaScript 类型来创建的。这种对象是通过服务配方注册的。为什么这被称为服务配方,而不是现有类型配方或其他东西,我无法理解。
简答:术语选择不当,造成混淆。来自 official docs on providers:
Note: Yes, we have called one of our service recipes 'Service'. We regret this and know that we'll be somehow punished for our misdeed. It's like we named one of our offspring 'Child'. Boy, that would mess with the teachers.
没有5种服务类型。实际上,您只有一种类型:提供者。他们让你提供服务。所有其他的食谱都建立在这个之上,并且只是为了让你的生活更简单(语法糖)。例如,如果您只想设置一个值并读取它,那么基础 "provider" 配方会感觉有点冗长。这就是 Angular 的创建者让您使用 .value 的原因。
只是为了说明,"Service recipes" 只是基本相同事物的变体,这里是用 .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 对象) - 您需要能够在模块的配置阶段配置您的服务