2014-11-20 70 views
0

在閱讀AngularJs提供者時,我注意到不同的作者使用不同的接收者來描述AngularJS提供者是什麼。AngularJS提供者有兩個不同的接收器

這些用於定義「提供者」的不同信息引起了很大的混淆。

我已經放下了兩種不同的方法,我在此plnkr看到:

http://plnkr.co/edit/ZelQLtRiibH1NqetSTqe?p=info

此外,相同的是如下:

app.provider('provider1', function(){ 

    this.$get = function(){ 
    return "value from provider1"; 
    } 

}); 

app.provider('provider2', function(){ 

    return { 
    $get: function() { 
     return "value from provider2"; 
    } 
    } 

}); 

正如你會發現,在「 provider1「,我通過了看起來像構造函數的東西。 在「provider2」中,我只返回一個對象。

有人能幫助澄清這裏發生了什麼?

回答

0

經過兩天的AngularJS源代碼篩選後,我終於找到了解決方案。這不是一件容易的事,也不是一件容易的事。爲了瞭解原因,人們必須很好地瞭解框架的源代碼。

在註冊提供者時,您可以選擇使用$ this屬性給$ get屬性或構造函數賦予一個對象。 Angular將以不同的方式處理。

提供者構造函數在註冊時被實例化。因此,如果它有任何尚未註冊的依賴關係,則此方法將失敗。

對於提供者對象,這不是必須的,因爲$ get是延遲執行的。

這些不是可互換的方法,都有自己的用例。

0

根據documentation,您可以直接提供提供程序實例(您的問題不受此問題影響),也可以爲提供程序提供構造函數(這兩個示例都是這樣做的)。

兩個例子的結果基本上是相同的,因爲how constructor functions operate in JavaScript(注意開始段落「由構造函數返回的對象成爲整個new表達式的結果。」)。

在第一個示例中,方法被分配給默認實例對象,然後該默認實例對象成爲實例,因爲構造函數不返回任何值。在第二個例子中,構造函數返回一個包含方法的對象,然後該方法成爲實例。

相關問題