在定义角度服务时,需要传递一个Constructor函数。此构造函数将使用“new”关键字初始化,“new”返回的对象将设置为服务。到现在为止还挺好。
但是,我经常遇到程序员正在创建服务的实例,如下所示:
app.service('aObj', function AClass(){
return function(a,b){
alert(a + b);
};
});
这将被称为
aObj(1,2)
虽然我不认为aObj现在最终会成为一个函数,但我无法理解为什么程序员会以这种方式初始化他们的服务。构造函数通常具有如下定义:
app.service('aObj', function AClass(){
this.var1 = undefined;
this.calculate = function(b){
alert(this.var1 + b);
};
});
然后最终会将其称为 aObj.var1 = 1; aObj.calculate(2);
有人可以详细说明使用前一种方法定义服务的目的吗?
Plnkr: http://plnkr.co/edit/tpl:FrTqqTNoY8BEfHs9bB0f
答案 0 :(得分:0)
这取决于您希望从服务中公开哪种API。
如果服务是用于公开几个密切相关的方法的容器,则返回一个对象并将其称为MyService.methodA()
和MyService.methodB()
。 Angular的$location service
就是一个例子。
如果服务仅公开单个公共方法,则服务用户可以更方便地将其称为MyService()
而不是MyService.theOnlyMethod()
。 Angular的$compile service
就是一个例子。