所以我的问题是Controller
构造函数执行多次。如果我有2 Directives
与特定Controller
相关联,那么它会运行2 + 1
,如果是3 Directives
,则3 + 1
...依此类推。如果我在该控制器中有一个ajax请求来获取数据,那么它会运行很多次,这并不是真正的必要...
为什么会这样?我非常担心它会使所有那些额外的不必要的ajax请求......
HTML:
<span ng-controller="MenuController as MenuCtrl">
<main-menu></main-menu>
</span>
控制器:
var howManyTimes = 0;
angular.module("shredkit", ["myDirectives"])
.controller("MenuController", function(){
++howManyTimes;
console.log("HOW MANY TIMES? THAT MANY: " + howManyTimes )
})
指令:
angular.module("myDirectives", [])
.directive("mainMenu", function(){
return{
restrict:"E", // type of directive - 'E' - element
templateUrl:'templates/main-menu.html',
controller:"MenuController",
controllerAs: "MenuCtrl"
};
})
答案 0 :(得分:8)
您的控制器为ng-controller标签运行一次:
<span ng-controller="MenuController as MenuCtrl">
每次启动一个新的DOM元素时,该范围都在其中:
controller:"MenuController"
这是因为角度控制器不是单例,它们是在每次使用时构造和启动的。
如果您打算使用多个控制器,因为您想要共享数据,请通过以下两种方式进行:
答案 1 :(得分:1)
您在div中使用MenuController,也在您的指令中使用(同一个)。显然,控制器是针对它们所分配的每个元素执行的,包括指令
中的赋值