我遇到了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 根据控制器的声明方式对控制器的作用域进行了不同的处理。 这种差异有原因吗?
我相信,这样做的原因是指令作为定义是一个单例。因此,当您在单一实例的返回对象上输入控制器作为属性时,它将为所有实例共享。
但是,当您使用 ng-controller 定义标记时,ng-controller 指令会在每个元素上实例化该控制器,因此它会为每个指令实例创建一个新控制器(从而创建一个新作用域)。