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
而不是其他指令上的控制器。@IvanVMediaController
是您指令的控制器。好的,可以了。第一次读到它时,我浏览了一下,并没有看到您所指的是指令本身。这是一个黑客行为,还是在AngularJs中这是一个有效的想法?我在其他任何地方都没见过这个(指令要求自己)。@IvanV。它甚至被angular本身用于某些指令。例如,ng model
具有要求:['ngModel','^?form']
。所以,不,这不是一个黑客:)好吧,也许我想做的可以用其他方式来做。好吧,也许我想做的可以用其他方式来做。我是个新手。假设我有一个表示基本媒体组件的指令(
),我还有视频组件
“声音组件”X组件
等等。。。我正在尝试尽可能少的代码重复,所以我在考虑某种组件/控制器继承。因此,basic
组件具有播放和停止的方法,然后video
组件将这些方法扩展到播放和停止视频源、music
播放/停止音乐的组件等。。。