Tengo una directiva de formulario que usa un callback
atributo especificado con un alcance de aislamiento:
scope: { callback: '&' }
Se encuentra dentro de un, ng-repeat
por lo que la expresión que paso incluye el id
del objeto como un argumento para la función de devolución de llamada:
<directive ng-repeat = "item in stuff" callback = "callback(item.id)"/>
Cuando termine con la directiva, llama $scope.callback()
desde su función de controlador. Para la mayoría de los casos, esto está bien, y es todo lo que quiero hacer, pero a veces me gustaría agregar otro argumento desde dentro directive
.
¿Existe una expresión angular que permita esto: que $scope.callback(arg2)
resulte en callback
ser llamado con arguments = [item.id, arg2]
?
Si no, ¿cuál es la mejor manera de hacer esto?
He descubierto que esto funciona:
<directive
ng-repeat = "item in stuff"
callback = "callback"
callback-arg="item.id"/>
Con
scope { callback: '=', callbackArg: '=' }
y la llamada directiva
$scope.callback.apply(null, [$scope.callbackArg].concat([arg2, arg3]) );
Pero no creo que sea particularmente bueno e implica poner cosas adicionales en el ámbito de aislamiento.
¿Hay una mejor manera?
Parque infantil Plunker aquí (tener la consola abierta).
ng
API, por ejemplo, ng-click="someFunction()"
es una expresión que evalúa la ejecución de una función.
$scope.callback
lo establece el callback="someFunction"
atributo y la scope: { callback: '=' }
propiedad del objeto de definición de directiva. $scope.callback
es una función que se llamará en una fecha posterior. El valor real del atributo es obviamente una cadena, que siempre es el caso con HTML.