我正在寻找一种方法来访问指令中的两个控制器。 目前它不起作用,我不知道为什么或甚至可能。
如果我同时使用require
和controller
选项,则link
函数ctrl
属性中的内容指的是我通过require
选项请求的任何内容。
当link
选项存在时,我无法想到访问require
函数内部控制器的方法。
似乎这两个属性是互斥的?
angular.module('moduleName').directive('directiveName', [function () {
return {
controller: 'MediaController',
require:'ngController',
link: function (scope, element, attributes, ctrl) {
// I need access to both controllers here
}
}
}]);
答案 0 :(得分:2)
如果你想要两个控制器,那么需要两个控制器:
angular.module('moduleName').directive('directiveName', [function () {
return {
controller: MediaController,
require:['directiveName', 'ngController'],
在这种情况下,ctrl
是一个包含两个控制器的数组。
答案 1 :(得分:0)
如果不知道为什么需要访问这两个控制器,我只能在这里提供最少的建议。我的建议是创建一个服务来处理交叉控制器的需求。服务是单例,它们支持数据绑定。服务是我每天对交叉控制器工作的偏好。例如:
App.controller('Ctrl1', function Ctrl1 ($scope, TestService) {
$scope.someValue = TestService.getValue();
});
App.controller('Ctrl2', function Ctrl2 ($scope, TestService) {
$scope.someValue = TestService.getValue();
});
App.factory('TestService', function() {
var myVal = "I Bound";
return {
getValue: function() {
return myVal;
}
}
});
此方法允许您抽象控制器需要直接访问另一个控制器。您的服务也可以纳入这些指令或其他服务。我希望这有点帮助。
谢谢,
约旦