控制器构造函数在Angular中执行多次

buk*_*ski 1 javascript angularjs angularjs-directive angularjs-scope

所以我的问题是Controller构造函数执行多次.如果我有2 Directives与特定关联,Controller那么它运行2 + 1,如果3 Directives,然后3 + 1...等等.如果我在该控制器中有一个ajax请求来获取数据,那么它会运行那么多次并不是真正的必要...

为什么会这样?我非常担心它会使所有那些额外的不必要的ajax请求......

HTML:

 <span ng-controller="MenuController as MenuCtrl">
    <main-menu></main-menu>
 </span>
Run Code Online (Sandbox Code Playgroud)

控制器:

  var howManyTimes = 0;
  angular.module("shredkit", ["myDirectives"])

  .controller("MenuController", function(){
    ++howManyTimes;
    console.log("HOW MANY TIMES? THAT MANY: " + howManyTimes )
  })
Run Code Online (Sandbox Code Playgroud)

指示:

angular.module("myDirectives", [])

  .directive("mainMenu", function(){
    return{
      restrict:"E", // type of directive - 'E' - element
      templateUrl:'templates/main-menu.html',
      controller:"MenuController",
      controllerAs: "MenuCtrl"
    };
  })
Run Code Online (Sandbox Code Playgroud)

Ben*_*ant 9

您的控制器为ng-controller标签运行一次:

 <span ng-controller="MenuController as MenuCtrl">
Run Code Online (Sandbox Code Playgroud)

每次启动一个新的DOM元素时,该范围都在其中:

 controller:"MenuController"
Run Code Online (Sandbox Code Playgroud)

这是因为角度控制器不是单例,它们是在每次使用时构造和启动的.

如果您打算使用多个控制器,因为您想要共享数据,请通过以下两种方式进行:

  1. 有一个父控制器包装所有儿童
  2. 使用共享服务来保持状态