Cambio de vistas en tiempo de ejecución con AngularJS

1
11714

En este tutorial se ve cómo cambiar programáticamente en tiempo de ejecución vistas parciales de aplicaciones web con AngularJS.

AngularJS permite de forma sencilla construir una SinglePageApplication con un index y varias vistas que suelen cambiar en función de una ruta que se emula para permitir una “navegación”.

Lo que no es tan intuitivo es cómo conseguir que una de estas vistas cambie a voluntad en función de eventos que ocurran sin que cambie la ruta de la página.

Voy a mostraros una forma de conseguir esto. Pueden existir otras formas de lograrlo, pero al igual que las definiciones de un patrón de diseño, esta es una solución probada a un problema conocido.

Nuestro objetivo es que la vista de detalle (la rosa) y su controlador asociado cambien en función de qué botón pulsemos.

Nuestro index.html tiene inicialmente esta forma.

index.html

Un controlador padre llamado mainController con la funcionalidad común entre los hijos, y una vista con controlador por cada parte de la pantalla.

Para agregar la vista dinámica para el detalle de los procesos del flujo vamos a introducir el nombre del fichero html en una variable en el controlador principal mainController.

Quedando nuestro index.html de esta forma.

index.html

En nuestro controlador main tenemos declarada nuestra variable y una función para cambiarla

mainController.js

Por si os resulta extraño el uso de vm, es una convención que se sigue, y su funcionamiento es análogo a usar $scope.

Ahora dentro del html de la vista de la izquierda del control de flujo, introducimos llamadas al mainController para llamar a nuestra función en cada uno de los links mediante el uso de ng-click.

Y al clicar en cada boton, nuestra vista de detalle cambiará a la que necesitemos.

Por último, necesitamos un controlador para cada vista específica, en mis pruebas estuve buscando un modo para introducir un controlador dinámico en el ng-include, pero al final he optado por usar el pensamiento lateral en busca de una solución más sencilla, y la forma más cómoda es introducir cada controlador dentro del primer elemento de la plantilla concreta de detalle, ya que este va a ser fijo.

Espero que os haya resultado útil y si alguna vez tenéis un problema similar, os ayude a tener algo con lo que empezar.

Un saludo,

Samuel Martín Gómez-Calcerrada

1 Comentario

Dejar respuesta

Please enter your comment!
Please enter your name here