首页 文章

在指令定义中指定控制器不会创建新范围

提问于
浏览
1

我遇到了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会根据控制器的声明方式对控制器的范围进行不同的处理 . 有这种差异的原因吗?

1 回答

  • 0

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

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

相关问题