我知道当你将指令和控制器放在同一个文件中时,你就不会这样做。即
.directive('example', function() {
})
.controller('MainCtrl', function($scope) {
// could use the example directive in the corresponding html
});
但是我一直认为当指令在不同的文件中时,你需要将它注入控制器。像这样:
example.directive.js
.directive('example', function() {
})
main.controller.js
.controller('MainCtrl', function($scope, example) {
});
见plnkr。其中,指令和控制器有两个不同的文件,指令不起作用。
注意:在我的应用程序中,我使用angular-fullstack generator创建指令,并且控制器中的指令 可用,而无需注入它。这是因为发电机吗?
无论如何,当我尝试将指令注入控制器时,我收到错误unknown provider: exampleProvider
。
这里发生了什么?
答案 0 :(得分:3)
您是否必须从不同的文件中注入指令?
它不是基于文件,而是基于角度模块名称。有时一个模块的指令可以在同一个文件中定义,有时也可以在不同的文件中定义,但只要模块名称被正确声明,并且包含控制器的模块正确地依赖于包含该指令的模块,两种方式都可以工作。
执行此操作时:
angular.module('myapp' ['mod1', 'mod2']);
然后myapp
模块上定义的任何控制器都可以使用来自myapp
,mod1
和mod2
的任何指令(以及角度核心中的内置指令) )。
当指令和控制器在同一个文件中时,会发生什么情况,因此您不需要将指令注入控制器?
我认为你使用相同的模块混淆了同一个文件。在这种情况下,如果指令和控制器都在同一个应用程序中定义(在同一个文件中,但这不是必需的),那么控制器可以使用该指令。
看看上面的plnkr,一切都很好除了你忘记了一个基本要素 - 你的index.html
实际上没有加载directive.js
文件,所以加上这个:
<script src="directive.js"></script>
然后指令正常工作。
答案 1 :(得分:1)
未注射指令。它们在您定义它们的模块中自动可用。