在angular指令内使用controller和require选项

时间:2014-04-15 21:59:13

标签: angularjs

我正在寻找一种方法来访问指令中的两个控制器。 目前它不起作用,我不知道为什么或甚至可能。

如果我同时使用requirecontroller选项,则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

    }

}

}]);

2 个答案:

答案 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;
        }
    }
});

此方法允许您抽象控制器需要直接访问另一个控制器。您的服务也可以纳入这些指令或其他服务。我希望这有点帮助。

谢谢,

约旦