2014-02-07 64 views
0

注:我不求值,工廠,服務和供應商 '食譜' 之間的區別,as explained here.

我在找澄清不同的方式來定義他們:糾正我,如果我錯了,但它看起來好像

myApp = angular.module('myApp', []) 
    .value(...) 
    .factory(...) 
    .service(...) 
    .provider(...) 

地圖

$provide.value() 
$provide.factory() 
$provide.service() 
$provide.provider() 

你ç無論使用哪種方式。我問this question,並意識到我可以使用$provide作爲依賴module().config()。我的問題:

  1. 當/爲什麼我會用angular.module()提供商()對使用$provide依賴?
  2. 在定義之後訪問/更改提供者是否有任何方式(或理由)?
  3. 使用AngularJS Batarang for Chrome,我正在查看各種角$scope屬性,並沒有看到$provide$injector。這些生活在哪裏?
+0

1 - 當你可以直接使用它,而另一個不能時,你可以使用第一個,這就是爲什麼angularJs使用依賴注入的原因,我認爲沒有什麼神祕之處。 2 - 是的,不僅僅是提供者,這就是爲什麼AngularJs專注於依賴注入。 3 - 我不知道。 –

回答

1
  1. 提供商方法關閉模塊定義僅僅是捷徑。只要你喜歡,就使用它們,因爲它會縮短閱讀和理解代碼的時間。比注入$提供者服務和直接調用更少的儀式/儀式。使用$直接提供的主要原因是訪問一個不是從模塊中快捷方式的方法(比如裝飾器),或者如果您必須從服務或組件中未完成的模塊定義中執行某些操作水平。

  2. 在定義提供程序後更改提供程序的常見情況是當您要集成第三方組件並想要添加或更改該行爲時。第三方模塊將定義服務,然後您介入並以某種特定於您的應用的方式覆蓋或擴展它。例如,常見的情況是採用內置的Angular異常處理程序,並將其擴展爲與您自己的組件進行交互。

  3. $ scope是用於數據綁定的特殊「膠水」,只顯示您在$ scope中顯式設置的屬性/函數。所有其他雜項模塊/服務都存儲在Angular的依賴注入容器中。 Angular首先要做的是創建一個$ injector實例來跟蹤依賴關係。因此$ injector === $ injector.get('$ injector')。同$提供。任何以$開頭的前綴都是Angular在$注入器中使用的服務。