gpt4 book ai didi

javascript - 在指令定义中指定 Controller 不会创建新范围

转载 作者:行者123 更新时间:2023-11-28 08:31:04 25 4
gpt4 key购买 nike

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

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

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

但是,如果我没有在指令的定义中指定 Controller :

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

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

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

MyController 的每个实例都会接收其自己的子作用域。

我预计这些方法会产生相同的结果,但显然 Angular 根据 Controller 的声明方式来不同地对待 Controller 的范围。造成这种差异的原因是什么?

最佳答案

我认为,其原因是指令作为定义是单例的。因此,当您输入 Controller 作为单例返回对象的属性时,它会为所有实例共享。

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

关于javascript - 在指令定义中指定 Controller 不会创建新范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21861092/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com