Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/20.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
Angularjs 在角度指令内同时使用控制器和require选项_Angularjs - Fatal编程技术网

Angularjs 在角度指令内同时使用控制器和require选项

Angularjs 在角度指令内同时使用控制器和require选项,angularjs,Angularjs,我正在寻找一种方法来访问指令中的两个控制器。 目前它不起作用,我不知道为什么,或者它是否可能 如果我同时使用require和controller选项,则链接函数ctrl属性中的内容指的是我通过require选项请求的任何内容 当出现require选项时,我想不出一种方法来访问链接功能中的控制器 这两个属性似乎是相互排斥的 angular.module('moduleName').directive('directiveName', [function () { return {

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

如果我同时使用
require
controller
选项,则
链接
函数
ctrl
属性中的内容指的是我通过
require
选项请求的任何内容

当出现
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

    }

}

}]))

在不知道为什么需要访问这两个控制器的情况下,我只能在这里提供最低限度的建议。我的建议是创建一个服务来处理跨控制器的需求。服务是单例的,它们支持数据绑定。服务是我每天跨控制者工作的首选。例如:

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;
        }
    }
});
此方法允许您抽象一个需要直接访问另一个控制器的控制器。您的服务也可以被拉入这些指令或其他服务中。我希望这有点帮助

谢谢


Jordan

如果需要两个控制器,则需要两个控制器:

angular.module('moduleName').directive('directiveName', [function () {

return {
controller: MediaController,
require:['directiveName', 'ngController'],

在本例中,
ctrl
是一个包含两个控制器的数组。

不是相互排斥的,它们做不同的事情。指令的控制器决不是链接函数的“ctrl”参数。它要么是你“需要”的,要么不存在。如果需要在控制器和链接函数之间共享数据和函数,则只需将它们包含在返回对象之外的指令中。@aet“该指令的控制器决不是链接函数的“ctrl”参数”-这是错误的。阅读文档。我需要访问
MediaController
而不是其他指令上的控制器。@IvanV
MediaController
是您指令的控制器。好的,可以了。第一次读到它时,我浏览了一下,并没有看到您所指的是指令本身。这是一个黑客行为,还是在AngularJs中这是一个有效的想法?我在其他任何地方都没见过这个(指令要求自己)。@IvanV。它甚至被angular本身用于某些指令。例如,
ng model
具有
要求:['ngModel','^?form']
。所以,不,这不是一个黑客:)好吧,也许我想做的可以用其他方式来做。好吧,也许我想做的可以用其他方式来做。我是个新手。假设我有一个表示基本媒体组件的指令(
),我还有
视频组件
“声音组件”
X组件
等等。。。我正在尝试尽可能少的代码重复,所以我在考虑某种组件/控制器继承。因此,
basic
组件具有播放
和停止
的方法,然后
video
组件将这些方法扩展到播放和停止视频源、
music
播放/停止音乐的组件等。。。