我正在学习AngularJS,我在开发者指南的三个不同地方看到了“服务”一词,这让我感到困惑。
一个。在Angular开发人员指南中,有一个section on services。它继续描述如何使用myModule.factory
声明这些。
B中。在Angular开发人员指南中,有一个section on providers,它表示注入器服务“创建两种类型的对象,服务和专用对象。”它着手描述 5服务配方,其中之一是:
所以似乎 A 是一个冗余涵盖 C 的整个部分,它已经是 B 的一部分,它将服务描述为一种可能的服务类型。
我很困惑。为什么服务是一种服务?这只是选择不当的术语与冗余的文档相结合吗?为什么服务部分( A )涵盖了使用angular.factory
创建服务,这是其他5种“服务类型”之一,还有服务?
答案 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)
我同意这令人困惑,因为我们作为开发人员过度使用术语服务。我试图帮助你。