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() y cancel() 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?

¿Fue útil?

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/

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top