我可以在同一指令中使用两个控制器吗?

时间:2014-04-03 08:27:08

标签: javascript angularjs angularjs-directive

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

这可能吗?

非常总结的近似方法:

CTRL1: -一个 -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
  };
});

将一些逻辑移到ctrl2(指令控制器)之后,控制器是:

CTRL1:

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"

的值

提前致谢。

1 个答案:

答案 0 :(得分:1)

如果我理解正确您需要的是访问父范围。您可以使用子控制器中的$ scope。$ parent。

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

EDITED:在看到你的代码之后,在这种情况下,指令使用与封闭控制器相同的范围,因为$ scope.test()或$ scope.a应该从指令中工作。