Мне кажется, я понимаю, что вы пытаетесь выполнить, поэтому приведу пример.
У вас есть контроллер (myController
), который вызывает директиву (myDirective
), которая вызывает другуюдиректива (anotherDirective
), и вы хотите передать функцию «обратного вызова» от myController
до myDirective
до anotherDirective
.Вот как вы можете это сделать:
angular
.module('myApp', [])
.controller('myController', ['$scope', function($scope) {
$scope.foo = function(param) {
alert('This function is declared on the main controller but called from a directive a few levels deep. Parameter: ' + param);
};
}])
.directive('myDirective', function() {
return {
template: `
<h1>My Directive</h1>
<another-directive callback="myFunction(b)"></another-directive>
`,
scope: {
myFunction: '&'
}
}
})
.directive('anotherDirective', function() {
return {
template: `
<h2>Another Directive</h2>
<button data-ng-click="callback({b: {a: 'hello world'}})">Click Me</button>
`,
scope: {
callback: '&'
}
}
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.6.5/angular.min.js"></script>
<div ng-app="myApp" ng-controller="myController">
<my-directive my-function="foo(a)"></my-directive>
<div>
Ключ к этому начинается в директиве самого низкого уровня anotherDirective
:
<button data-ng-click="callback({b: {a: 'hello world'}})">Click Me</button>
Теперь вспомните, как был установлен callback
его родитель:
<another-directive callback="myFunction(b)"></another-directive>
И как первоначально было объявлено myFunction
в его родителе:
<my-directive my-function="foo(a)"></my-directive>
Я изо всех сил пытаюсь найти способ объяснить это должным образом, но с этимНапример, вы должны увидеть шаблон с выражениями, всплывающими у каждого родителя.