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