Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/447.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 控制器构造函数函数以角度执行多次_Javascript_Angularjs_Angularjs Directive_Angularjs Scope - Fatal编程技术网

Javascript 控制器构造函数函数以角度执行多次

Javascript 控制器构造函数函数以角度执行多次,javascript,angularjs,angularjs-directive,angularjs-scope,Javascript,Angularjs,Angularjs Directive,Angularjs Scope,所以我的问题是Controller构造函数执行多次。如果我有2个与特定的控制器关联的指令,那么它运行2+1,如果有3个指令,那么3+1。。。等等如果我在那个控制器中有一个ajax请求来获取数据,那么它会运行很多次,这其实并不必要 为什么会这样?我非常担心它会使所有这些额外的不必要的ajax请求 HTML: <span ng-controller="MenuController as MenuCtrl"> <main-menu></main-menu>

所以我的问题是
Controller
构造函数执行多次。如果我有2个与特定的
控制器关联的
指令
,那么它运行
2+1
,如果有3个
指令
,那么
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"
    };
  })
指令:

 <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"
    };
  })

为ng控制器标记运行一次控制器:

 <span ng-controller="MenuController as MenuCtrl">
之所以会出现这种情况,是因为angular中的控制器不是单音,它们是在每次使用时构造和初始化的

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

  • 让父控制器包装所有子控制器
  • 使用共享服务保存状态

  • 为ng控制器标记运行一次控制器:

     <span ng-controller="MenuController as MenuCtrl">
    
    之所以会出现这种情况,是因为angular中的控制器不是单音,它们是在每次使用时构造和初始化的

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

  • 让父控制器包装所有子控制器
  • 使用共享服务保存状态

  • 在div和指令(同一个)中使用MenuController。显然,控制器是为每个元素执行的,它们被指定包含指令中的赋值

    您在div和指令中使用MenuController(同一个)。显然,控制器是为每个元素执行的,它们被认为包括指令中的赋值

    如果要使用调用该控制器的指令,则不需要在span标记上有
    ng控制器
    。(见下面本的答案)谢谢,我想我现在明白了!如果要使用调用该控制器的指令,则不需要在span标记上有
    ng控制器
    。(见下面本的答案)谢谢,我想我现在明白了!假设-每个指令一个控制器是正确的吗?@fjckls更可能说定义此控制器的每个dom元素一个控制器,可以是一个指令也可以是不正确的假设-每个指令一个控制器是正确的吗?@fjckls更可能说定义此控制器的每个dom元素一个控制器,可以是指令也可以不是