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