Нормальные варианты использования в angular
Если у вас есть родительская директива и дочерняя директива, вы создаете методы в контроллере родительской директивы и требуете родительский контроллер в вашей дочерней директиве. Angular передаст родительский контроллер в функцию ссылок ваших дочерних директив.
Мой пример использования
У меня есть вариант использования, когда дочерняя директива является родителем для другой директивы. У меня есть указатель сверху, который требуется директивой посередине. Средняя директива требуется последней директивой внизу.
В легком мире я мог бы просто создать метод ссылок и контроллер для средней директивы. Метод link обрабатывает все с помощью верхнего контроллера, а средний контроллер передается в нижнюю директиву.
В моем случае методы в контроллере средней директивы должны вызывать методы в родительском объекте, поэтому мне нужен верхний контроллер в среднем контроллере, а не в функции ссылки из средней директивы!
Вопрос
Как я могу ввести требуемый контроллер в контроллер вместо функции ссылки
angular.module('app').directive('top', function () {
return {
$scope: true,
templateUrl: "top.html",
controller: function() {
this.topMethod = function() {
// do something on top
}
}
}
});
angular.module('app').directive('middle', function () {
return {
$scope: true,
templateUrl: "middle.html",
require: "^top",
controller: function($scope, $attrs, topController) {
this.middleMethod = function() {
// do something in the middle
// call something in top controller, this is the part that makes everything so complicated
topController.topMethod();
}
}
}
});
angular.module('app').directive('bottom', function () {
return {
$scope: true,
templateUrl: "bottom.html",
require: "^middle",
link: function(scope, element, attrs, middleController) {
$scope.bottomMethod = function() {
// do something at the bottom
// call something in the parent controller
middleController.middleMethod();
}
}
}
});