【问题标题】:Specifying controller in directive definition does not create new scope在指令定义中指定控制器不会创建新范围
【发布时间】:2014-02-18 17:29:34
【问题描述】:

我遇到了 AngularJS 指令的一个相当不直观的方面,我很好奇这种行为是否有合理的原因。当我在指令的定义中指定控制器时:

angular.module('MyApp.directives', [])
    .directive('myDirective, function () {
        templateUrl: "my-template.html",
        controller: "MyController"
    };

指令模板的范围对于指令的所有实例都是相同的。

但是,如果我在指令的定义中指定控制器:

angular.module('MyApp.directives', [])
    .directive('myDirective, function () {
        templateUrl: "my-template.html"
    };

而是使用ng-controller直接在指令上定义控制器:

<my-directive ng-controller="MyController"/>

MyController 的每个实例都有自己的子作用域。

我希望这些方法能够产生相同的结果,但显然 Angular 会根据控制器的声明方式以不同的方式处理控制器的作用域。有这种差异的原因吗?

【问题讨论】:

    标签: javascript angularjs controller angularjs-directive angularjs-scope


    【解决方案1】:

    我相信,原因在于指令作为定义是一个单例。因此,当您输入一个控制器作为单例返回对象的属性时,它会为所有实例共享。

    但是,当您使用 ng-controller 定义标记时,ng-controller 指令会在每个元素上实例化该控制器,因此它会为每个指令实例创建一个新控制器(从而创建一个新范围)。

    【讨论】:

      猜你喜欢
      • 2023-03-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-04-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多