2016-12-30 62 views
0

方法1以下两个AngularJS构造(如果有)之间的区别?

在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

的两个答案,我的答复是突然被删除......哦也感谢反正 – user7339019

+0

你是什么意思? –

+0

我的帖子的两个答案,都以同样的精神,说: – user7339019

回答

1

不,第一种方法是优选的。

差异在于角度如何对待范围。

第二方法使得指令依赖于外部范围(由ng-controller="myController"创建),其是针对创建指令(代码隔离)的点。

第二种方法的工作方式相同,当您使用父母范围(默认情况下,当你不设置scope财产指令DDO - Ref: What is default Angular directive scope

如果您在指令隔离范围

第二种方法是行不通的,如下创建:

scope: { 
    param1: "=" 
} 

由于您将无法访问myController的属性。


编辑

指令规则可能是复杂的,了解所有的情况下,可以考虑使用.component(),因为它有更简单,并遵循最佳实践 - Introduction to Angular's components


延伸阅读:

+0

谢谢,正是我所需要的! – user7339019

+0

还有一个跟进,这是否意味着创建一个指令与* no *范围属性之间的差异与创建它与范围属性设置为一个空对象之间的区别? – user7339019

+0

@ user7339019 - 是的,'scope'参数有两个值,true/false或object。如果存在对象(即使为空),则范围将被隔离,您无法从父级范围访问属性。 如果'scope'设置为false或仅在DDO中跳过,则指令不会创建新的范围。 –