Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/430.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 - Fatal编程技术网

Javascript 我可以在同一方向上使用两个控制器吗?

Javascript 我可以在同一方向上使用两个控制器吗?,javascript,angularjs,angularjs-directive,Javascript,Angularjs,Angularjs Directive,我有一个使用控制器(例如ctrl1)的局部视图,但在该局部视图中,我还有一个带有自己模板URL的指令,我想将特定逻辑从ctrl1移动到指令的控制器,但在ctrl1中保留一些常量或公共逻辑(对于其他指令) 这可能吗 一种近似方法总结如下: ctrl1: -a -b -c ctrl1->ctrl2: ctrl1: -a ctrl2: -b -c 详细举例如下: ctrl1: var ctrl1 = angular.module("MyModule1", []); ctrl1.controller("

我有一个使用控制器(例如ctrl1)的局部视图,但在该局部视图中,我还有一个带有自己模板URL的指令,我想将特定逻辑从ctrl1移动到指令的控制器,但在ctrl1中保留一些常量或公共逻辑(对于其他指令)

这可能吗

一种近似方法总结如下:

ctrl1: -a -b -c

ctrl1->ctrl2:

ctrl1: -a

ctrl2: -b -c

详细举例如下:

ctrl1:

var ctrl1 = angular.module("MyModule1", []);
ctrl1.controller("MyCtrl1", function($scope){
  $scope.a = 1;
  $scope.test = function(){
    //whatever
  };
  $scope.secondtest = function(){
    //whatever again
  };
});
var ctrl1 = angular.module("MyModule1", []);
ctrl1.controller("MyCtrl1", function($scope){
  $scope.a = 1;
  $scope.test = function(){
    //whatever
  };
});
将一些逻辑移动到ctrl2(指令的控制器)后,控制器是:

ctrl1:

var ctrl1 = angular.module("MyModule1", []);
ctrl1.controller("MyCtrl1", function($scope){
  $scope.a = 1;
  $scope.test = function(){
    //whatever
  };
  $scope.secondtest = function(){
    //whatever again
  };
});
var ctrl1 = angular.module("MyModule1", []);
ctrl1.controller("MyCtrl1", function($scope){
  $scope.a = 1;
  $scope.test = function(){
    //whatever
  };
});
指令:

var direc = angular.module("MyModule2", []);
direc.directive("MyDirective", function(){
  return{
     controller: function($scope){  //This is what I called ctrl2 previously
       $scope.secondtest = function(){
         //whatever again
       };
     },
     templateURL: 'partials/dialog/userdata.html'
  }
 });    
在指令中,我仍然希望使用函数“$scope.test”或“$scope.a”变量,并且第二个测试函数可以访问该数据,可能它必须查询“$scope.a”的值


提前感谢。

如果我理解正确,您需要的是访问父作用域。您可以从子控制器使用$scope.$parent

无论如何,正如您所说的,您需要公共逻辑或常量,听起来您需要使用一个可以从每个控制器访问的服务(单例)


编辑:在看到您的代码后,在本例中,指令使用的作用域与封闭控制器的作用域相同,例如$scope.test()或$scope.a应该在指令中起作用。

这确实是非常概括的。您想将逻辑移到指令中,还是让它在指令中可访问?我将扩展解释,这只是为了有一个概述:)@Sprottenwels我只想将部分逻辑从控制器移动到指令,但仍然使用原始控制器中的公共元素。我将等待扩展解释。这并不完全是因为现在如果我将控制器保留为部分视图,则指令与该控制器配合良好,但是该控制器很混乱,所以我想将每个指令的特定登录移动到其指令的控制器中,并将所有指令使用的公共变量或公共函数保留在ctrl1中。