Angular: chamando a function do controlador dentro de uma function de link de diretiva usando &

Estamos encontrando um problema ao tentar chamar uma function passada para uma diretiva usando o “&” na function de link de nossa diretiva.

Parece que a function é chamada no controlador, mas nenhum argumento é passado na chamada. Todos os exemplos que temos visto envolvem a passagem, criando uma chamada no modelo. Existe uma maneira de chamar uma function em sua diretiva de seu modelo e, em seguida, fazer algo na diretiva que chama a function do controlador passada para ela?

Você está passando os argumentos dentro de {} s? Por exemplo, dentro da function de link da diretiva, você vai querer chamar o método da seguinte forma: 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); } } 

Violino .

Além da resposta de Mark, gostaria de salientar que você pode poupar algumas letras usando a abreviação & . Isso assumirá que o callback-fn referenciado em seu HTML existe como scope.callbackFn em seu escopo. Tudo o resto ainda é o mesmo, então há apenas duas linhas para mudar. Eu mantive a versão de Mark como comentários, então você deve ser capaz de identificar a diferença facilmente.

 
 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); } }