Eu tenho uma diretiva de formulário que usa um callback
atributo especificado com um escopo isolado:
scope: { callback: '&' }
Ele fica dentro de um, ng-repeat
então a expressão que eu passo inclui id
o objeto como argumento para a função de retorno de chamada:
<directive ng-repeat = "item in stuff" callback = "callback(item.id)"/>
Quando terminei com a diretiva, ela chama $scope.callback()
de sua função de controlador. Na maioria dos casos, isso é bom e é tudo o que quero fazer, mas às vezes eu gostaria de adicionar outro argumento de dentro dele directive
.
Existe uma expressão angular que permita isso $scope.callback(arg2)
:, resultando em callback
ser chamado com arguments = [item.id, arg2]
?
Caso contrário, qual é a melhor maneira de fazer isso?
Eu descobri que isso funciona:
<directive
ng-repeat = "item in stuff"
callback = "callback"
callback-arg="item.id"/>
Com
scope { callback: '=', callbackArg: '=' }
e a diretiva chamando
$scope.callback.apply(null, [$scope.callbackArg].concat([arg2, arg3]) );
Mas não acho que seja particularmente interessante e envolve colocar coisas extras no escopo isolado.
Existe uma maneira melhor?
Playground Plunker aqui (tenha o console aberto).
ng
API, por exemplo, ng-click="someFunction()"
é uma expressão que avalia a execução de uma função.
$scope.callback
é definido pelo callback="someFunction"
atributo e a scope: { callback: '=' }
propriedade do objeto de definição de diretiva. $scope.callback
é uma função a ser chamada posteriormente. O valor real do atributo é obviamente uma string - esse é sempre o caso do HTML.