Angular: función de controlador de llamada dentro de una función de enlace de directivas usando &

Nos encontramos con un problema al tratar de llamar a una función que se pasa a una directiva usando el signo ‘&’ en la función de enlace de nuestra directiva.

Parece que la función se llama en el controlador pero no se pasan argumentos en la llamada. Todos los ejemplos que hemos visto implican pasar creando una llamada en plantilla. ¿Hay alguna manera de invocar una función en su directiva desde su plantilla, y luego hacer algo en la directiva que llama a la función del controlador que se transfiere a ella?

¿Estás transmitiendo los argumentos dentro de {} s? Por ejemplo, dentro de la función de enlace de la directiva, querrá llamar al método de la siguiente manera: scope.someCtrlFn({arg1: someValue});

 
 app.directive('myDirective', function() { return { scope: { someCtrlFn: '&callbackFn' }, link: function(scope, element, attrs) { scope.someCtrlFn({arg1: 22}); }, } }); function MyCtrl($scope) { $scope.ctrlFn = function(test) { console.log(test); } } 

Fiddle .

Además de la respuesta de Mark, me gustaría señalar que puedes guardar algunas letras usando la & taquigrafía. Esto supondrá que callback-fn referencia en su HTML existe como scope.callbackFn en su ámbito. Todo lo demás sigue igual, por lo que solo hay dos líneas para cambiar. Mantuve la versión de Mark como comentarios, por lo que debería ser capaz de detectar la diferencia fácilmente.

 
 app.directive('myDirective', function() { return { scope: { callbackFn: '&' }, //scope: { someCtrlFn: '&callbackFn' }, link: function(scope, element, attrs) { scope.callbackFn({arg1: 22}); //scope.someCtrlFn({arg1: 22}); }, } }); function MyCtrl($scope) { $scope.ctrlFn = function(test) { console.log(test); } }