2017-02-09 13 views
0

主要模塊app.js爲什麼不能省略模塊依賴於angular.module時定義組件

angular.module("myApp",["phoneList"]); 

,我按照tutorial使名爲sperate組件模塊phoneList

angular.module("phoneList") 
         //^ omit the empty bracket here, cause no dependency needed 
    .component('phoneList', { 
     templateUrl: 'template/phone-list.html', 
     controller: function(){ 
      this.phones = [ 
       {name: "iphone", snippet: "designed by apple"}, 
       {name: "nexus", snippet: "phone that could explode"} 
      ]} 

}); 

但它會抱怨:

angular.min.js:6 Uncaught Error: [$injector:nomod] http://errors.angularjs.org/1.6.1/$injector/nomod?p0=phoneList 
    at angular.min.js:6 
    at angular.min.js:25 
    at b (angular.min.js:24) 
    at Object.module (angular.min.js:25) 
    at phone-list.js:5 

W我添加一個空[]回:

angular.module("phoneList",[]) 
    .component(//balabla) 

事情會工作得很好。我檢查了API Reference,它證明依賴是可選的,因此可以省略。

那麼是什麼原因導致了這個問題呢? enter image description here

+2

傳遞一個參數將檢索現有的'angular.Module',而傳遞多個參數會創建一個新的'angular。模塊' 當你正在創建'phoneList'一個新模塊,所以你必須通過第二個參數 – muneebShabbir

回答

3

根據文檔,

angular.module(姓名,[需要],[configFn]);

如果指定,則創建新模塊。如果未指定,則將檢索 模塊以進行進一步配置。

這意味着你需要傳遞一個空數組[]。爲了讓沒有任何依賴模塊工作,你可以使用它作爲

angular.module("phoneList",[]) 

更新

如果模塊已經宣佈你不必再通過依賴。所以,你可以把你的組件/控制器/服務/廠爲

angular.module('phoneList').controller(...)... 
+0

檢查快照我剛剛追加到問題 – armnotstrong

+0

@armnotstrong模塊和組件是兩個不同的東西,當你聲明一個組件時,if該模塊alreaydy宣佈你不必再次通過傾向 – Sajeetharan

+0

謝謝@Sajeetharan,現在我明白了,我對規範有誤解 – armnotstrong

1

一旦你的模塊定義的,你可以參考它沒有第二個參數。你第一次做。

所以......

angular.module('app',[ dependencies... ]); 
angular.module('app').controller(...)... 

是正確的。

1

這是因爲在第二個參數中傳遞一個數組告訴angular使用所有提到的依賴關係創建模塊的新實例。如果你沒有任何依賴關係,你必須傳遞一個空數組來創建一個新模塊。

通過省略此參數,您可以請求角度來檢索現有模塊。而且,在您的代碼中,您沒有以前命名爲phoneList的模塊。這就是爲什麼它會給你錯誤。

相關問題