有人可以解释为什么纯HTML元素中的ng-controller会起作用,但是如果我在一个指令中写它会不起作用?
例如,这个将起作用:
<button ng-click="doThis()" ng-controller="myCtrl" />
单击此按钮将在myCtrl中找到doThis()函数,效果很好。
但是 -
<buttonDirective ng-click="doThis()" ng-controller="myCtrl" />
这不起作用。该指令不会在页面上完全呈现。 为了实现这个目的,我需要用div来表达它:
<div ng-controller="myCtrl">
<buttonDirective ng-click="doThis()" />
</div>
为什么呢?是否应该使用带有ng-controller的元素敲击每个指令? 如果我在另一个指令中有多个指令,每个指针都应该用自己的ng-controller div敲击怎么办?
答案 0 :(得分:1)
此处还有其他功能。
您在指令中设置的范围是什么?您是在指令JS代码中指定控制器吗?
Here's an example Plunkr显示您提供的两个示例并排工作(从Angular站点更改)。
因此,要回答您的问题,您可以将控制器分为三个位置:
<buttonDirective ng-click="doThis()" ng-controller="myCtrl" />
<div ng-controller="myCtrl">
<buttonDirective ng-click="doThis()" />
</div>
.directive('dir', function() {
return {
restrict: 'E',
controller: "name" // or function
};
});
答案 1 :(得分:0)
我的原始答案说,SamP指出,优先考虑是错误的。就像他说的那样,还有其他的东西在起作用。如果您向我们展示更多代码,那么我们可能会告诉您错误。
我怀疑可能导致您的问题是您在html中将指令指定为camelCase。当我在我写的那个插件中做到这一点时,它没有用。当我编写自己的指令时,我通常会做的是将其写成“小写”字样。格式。
请参阅the plunker showing the camelCase/lower-case difference
可能导致问题的另一个原因是你使用了指令的自我结束标记AngularJs doesn't really support self-closing tags。
这是我原来的错误的答案:
您需要更改自定义指令的priority,希望在 ng-controller
指令后 。
答案 2 :(得分:0)
我认为&#39; ng-transclude&#39;可能是这里的罪魁祸首。
在指令中你可能没有提到transclude属性,因此它不起作用。