Cómo llegar a una función de una directiva por la que se define en la línea de la controladora
-
21-12-2019 - |
Pregunta
Si tengo un directive
, que tiene su propio controller
definida en su cuerpo:
directives.directive("formWrapper", ['User','$location', function(User, $location) {
return {
...
template: '<div>' +
'<input ng-click="cancel()" type="button" value="Cancel"/>' +
'<input ng-click="save()" type="button" value="Save" />' +
'</div>',
controller: function($scope, $location, User) {
$scope.fields = User.get( {username: "username"} );
var save = function() {...}
var cancel = function() {...}
}
}
}]);
En un template
sección estoy tratando de llegar a las funciones de save()
y cancel()
que se definen en el controlador.
Por ahora no funciona hacer clic en los botones no pasa nada.
Yo realmente no quiero definir
save()
ycancel()
en el$scope
, porque sólo de esta directiva se supone que el uso de ellos.O tal vez es está bien para hacer de ellos en el$scope
?No estoy seguro de eso de aislamiento.
Q: ¿Cómo puedo conseguirlo?Alguna solución común / visión acerca de eso?
Solución
Usted necesidad de poner save()
y cancel()
sobre el alcance de la directiva de modo que la plantilla se puede ver (por ahora sólo son visibles dentro de la función de control).
Así que en lugar de:
var save = function() {...}
var cancel = function() {...}
Quieres
$scope.save = function() {...}
$scope.cancel = function() {...}
Está bien, para que éstos estén en el ámbito de aplicación de la directiva.No se como ponerlos en $rootScope
que es global.
Usted notará que he añadido esto a su directiva:
scope: {},
Que hace que este $scope
se limita a la presente directiva (también conocido como "aislado ámbito de aplicación").Así que usted puede pensar en esto como un objeto o ámbito de la función - no estás contaminando espacio de nombres global.
He aquí una demostración: http://jsfiddle.net/uLfLM/1/