martes, 26 de abril de 2016

AngularJS. Registrando el controlador hijo con el padre para poder hacer llamadas síncronas

Como estàn?

Había estado buscando formas de enviar mensajes desde un controlador padre hacia el hijo en AngularJS. Hay formas de hacerlo con $watchers o servicios comunes. Voy a describir una forma que estoy utilizando:

Registrar el controlador hijo con el controlador padre

Supongamos que tenemos un controlador como este:

bla.controller('ControladorHijo', function($scope) {

    $scope.metodoQueHayQueLlamar = function(unaCadena) {
        console.log(unaCadena);
    }
});

Un controlador hijo puede llamar a los métodos del controlador padre pero viceversa no funciona así que esto no va a funcionar:

bla.controller('ControladorPadre', function($scope) {

    $scope.unClick = function() {
        $scope.metodoQueHayQueLlamar('Hola!'); // buena suerte!!!
    }

});

Eso no va a funcionar, cierto?

Pero si registramos el hijo con el padre, entonces el padre tendría la instancia del $scope del hijo y así podría utilizarlo de forma síncrona. Algo como esto:

bla.controller('ControladorHijo', function($scope) {

    $scope.registrarHijo($scope);

    $scope.unClick = function() {
        $scope.metodoQueHayQueLlamar('Hola!');
    }

});

Y ahora en el controlador padre:

bla.controller('ControladorPadre', function($scope) {

    $scope.scopeHijo = null;
    $scope.registrarHijo = function(scopeHijo) {
        $scope.scopeHijo = scopeHijo;
    }

    $scope.unClick = function() {
        if ($scope.scopeHijo == null) {
            return;
        }

        $scope.scopeHijo.metodoQueHayQueLlamar('Hola!');
    }

});


Eso debería funcionar. Espero que les sirva.

No hay comentarios:

Publicar un comentario en la entrada