以下两个AngularJS构造之间的区别,如果有的话?

时间:2016-12-30 13:22:07

标签: javascript angularjs

方法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;
}

这两种情况都有一些指令与其他一些属性(模板等),但我只是改变控制器的位置。这两种方法是否类似?

1 个答案:

答案 0 :(得分:1)

不,首选方法。

差异在于角度如何处理范围。

第二种方法使得指令依赖于外部作用域(由ng-controller="myController"创建),这与创建指令(代码隔离)相反。

当您使用父范围时,第二种方法将起作用(默认情况下,当您未在指令DDO中设置scope属性时 - Ref: What is default Angular directive scope

如果在指令中有隔离范围,则第二种方法将不起作用,如下所示:

scope: {
    param1: "="
}

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

修改

指令规则可能很难理解所有情况,请考虑使用.component(),因为它更简单并遵循最佳做法 - Introduction to Angular's components

进一步阅读: