2014-10-28 52 views
0

我的印象(正確,我的谷歌搜索顯示),Javascript功能可以採取任何數量的參數,無論打算什麼。爲什麼向DDO工廠函數添加參數會中斷應用程序?

所以這是奇怪的是,我的工作指令,在這裏

... 
module.directive('aye', function(){ 
      return { 
       restrict: 'AE', 
       replace: 'true', 
       template: "<p> Hi </p>" 
      }; 
    }); 
    </script> 
</head> 

<body ng-controller="myController"> 
    <div> 
     {{ airportsArray() }} 
    </div> 
    <div aye></div> 
</body> 
</html> 

但不是在這裏過

module.directive('aye', function(injectables){ 
      return { 
       restrict: 'AE', 
       replace: 'true', 
       template: "<p> Hi </p>" 
      }; 
    }); 
    </script> 
</head> 

<body ng-controller="myController"> 
    <div> 
     {{ airportsArray() }} 
    </div> 
    <div aye></div> 
</body> 
</html> 

我只是去掉參數injectables(這是我在Angular's very own documentation找到)。爲什麼這會給我錯誤,如

Error: [$injector:unpr] http://errors.angularjs.org/1.2.15/$injector/unpr?p0=injectablesProvider%20%3C-%20injectables%20%3C-%20ayeDirective 

有人可以解釋嗎?

+0

在文件中,它表示注射劑,它表示您的注射劑,而不是字面注射劑。例如,如果您的應用程序中定義了名爲injectables的服務,那麼您的代碼就可以工作。是否有意義? – 2014-10-28 11:24:45

+0

沒有類似'injectables'的服務。文檔只強調我們可以在指令定義函數中傳遞依賴關係。 – Chandermani 2014-10-28 11:27:06

回答

0

通過依賴注入角度傳遞這些值。並根據參數的名稱確定要注入的內容(當進行縮小時可能會更復雜)。而在你上面的例子,你還沒有確定一個組件(服務/工廠/價值/等),名稱爲「注射劑」,因此它顯示你的錯誤是,它無法找到「注射」

//Create something that can be injected: 
module.service('fooService', function($http){ 
    /* ... some functions here ... */ 
}); 

//Inject this defined piece into your directive: 
module.directive('myDirective', function(fooService){ 
}); 

當angular需要創建一個「myDirective」的實例,它會看到它需要參數「fooService」,所以它會進入它的依賴解析器來找到它,然後將它作爲參數傳遞給你的指令。

+0

你可以包含'injectables'的一個好定義的例子嗎? – CodyBugstein 2014-10-28 11:37:02

+0

「injectables」只是一個參數的佔位符,可以通過angular的依賴注入機制注入。話雖如此,我會在我的答案中舉一個例子 – Brocco 2014-10-28 13:29:08

相關問題