方法1
在HTML中:
<my-directive>
</my-directive>
在脚本中:
function myDirective() {
var ddo = {
[LOTS OF OTHER VERY IMPORTANT DIRECTIVE PROPERTIES HERE]
controller: myController
bindToController: true
};
return ddo;
}
方法2
在HTML中:
<my-directive ng-controller="myController">
</my-directive>
在脚本中:
function myDirective() {
var ddo = {
[LOTS OF VERY IMPORTANT DIRECTIVE PROPERTIES HERE]
};
return ddo;
}
这两种情况都有一些指令与其他一些属性(模板等),但我只是改变控制器的位置。这两种方法是否类似?
答案 0 :(得分:1)
不,首选方法。
差异在于角度如何处理范围。
第二种方法使得指令依赖于外部作用域(由ng-controller="myController"
创建),这与创建指令(代码隔离)相反。
当您使用父范围时,第二种方法将起作用(默认情况下,当您未在指令DDO中设置scope
属性时 - Ref: What is default Angular directive scope)
如果在指令中有隔离范围,则第二种方法将不起作用,如下所示:
scope: {
param1: "="
}
由于您无法访问myController
中的属性。
修改强>:
指令规则可能很难理解所有情况,请考虑使用.component()
,因为它更简单并遵循最佳做法 - Introduction to Angular's components。
进一步阅读: