现在我正在努力寻找一种简单的方法来解决这个问题,但是我正在处理一些非常古老的代码,我可以做很少的事情来重新安排,而且我现在有一个控制器< / p>
angular.module('a.module').controller('SomeController'...
和一个定义为
的指令angular.module('b.module', ['a.module'])
angular.module('b.module').directive('aDirective', () => {
return: {
controller: (scope) => {....},
link: (scope, elem, attrs) {...}
}
});
从模块b。中的指令的link函数中,我想访问SomeController及其函数。我没有运气就尝试了$指令服务,并且不确定我可以对定义了控制器的指令做很多事情。
答案 0 :(得分:0)
根据您的DOM结构以及您尝试访问/传递的确切内容,如果您的指令是绑定到控制器的元素的子节点,则可以选择使用隔离范围。您可以使用隔离范围修饰符“@”,“=”或“&amp;”将控制器中的方法和/或数据提供给您的指令,如下所示:
angular.module('a.module').controller('SomeController', [
'$scope',
function ($scope) {
$scope.text = "This is my text";
$scope.func = function() {
alert("Called from a.module");
}
}
]);
angular.module('b.module').directive('aDirective', function() {
return {
scope: {
text: "@",
func: "&"
},
template: '<div ng-click="func()">{{ dir }}</div>',
link: function (scope, element, attrs) {
scope.dir = scope.text;
}
}
})
和DOM:
<div ng-controller="SomeController">
<a-directive func="func()" text="{{ text }}"></a-directive>
</div>
以下是Plunkr示例:http://plnkr.co/edit/kGicc8h79DGn1QvmjJzg
但是,只有当你试图给你的指令一些特定的行为时,才会谨慎使用这种方法。如果您的控制器中有业务逻辑可以/应该由其他控制器或指令使用,请不要将其保留在控制器中。相反,将这些功能提取到服务中并将服务注入指令/控制器。