我遇到了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 回答
我相信,其原因在于作为定义的指令是单身 . 因此,当您在单例的返回对象上输入控制器作为属性时,它将为所有实例共享 .
但是当您使用ng-controller定义标记时,ng-controller指令会在每个元素上实例化该控制器,因此它会为每个指令实例创建一个新控制器(从而为新范围创建) .