2014-12-05 55 views
0

定義角度服務時,需要傳遞構造函數。此構造函數將使用「new」關鍵字進行初始化,並將「new」返回的對象設置爲該服務。到現在爲止還挺好。爲什麼從角度服務返回函數

但是我經常遇到的實例,其中程序員如下創建服務:

app.service('aObj', function AClass(){ 

    return function(a,b){ 
    alert(a + b); 
    }; 

}); 

這被稱爲

aObj(1,2) 

雖然我undertsand是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

這取決於您想從您的服務中公開哪種類型的API。

返回一個對象,並將它們稱爲MyService.methodA()MyService.methodB()如果該服務是用於公開幾個密切相關的方法的容器。 Angular的$location service就是一個例子。

如果服務僅公開一種公共方法,那麼服務的用戶可以更方便地將其稱爲MyService()而不是MyService.theOnlyMethod()。 Angular的$compile service就是一個例子。

+0

一個合理的解釋..謝謝 – runtimeZero 2014-12-06 16:33:30