Javascript 我可以在同一方向上使用两个控制器吗?
我有一个使用控制器(例如ctrl1)的局部视图,但在该局部视图中,我还有一个带有自己模板URL的指令,我想将特定逻辑从ctrl1移动到指令的控制器,但在ctrl1中保留一些常量或公共逻辑(对于其他指令) 这可能吗 一种近似方法总结如下: ctrl1: -a -b -c ctrl1->ctrl2: ctrl1: -a ctrl2: -b -c 详细举例如下: ctrl1: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("
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中。