AngularJS ng-view con ejemplo
โก Resumen inteligente
En AngularJS, las vistas permiten que una pรกgina cambie su contenido en lugar de navegar a otra pรกgina, lo que hace que una aplicaciรณn de una sola pรกgina se sienta instantรกnea. La directiva ng-view marca la regiรณn que cada ruta reemplaza con su propia plantilla y controlador.

Sitios conocidos como Gmail Se utiliza el concepto de aplicaciones de una sola pรกgina (SPA). Cuando un usuario solicita una pรกgina diferente, la aplicaciรณn no la redirige; muestra la vista de la nueva pรกgina dentro de la pรกgina existente, de modo que el usuario tiene la sensaciรณn de que nunca se ha marchado. Lo mismo se logra en AngularJS mediante vistas y rutas.
โ ๏ธ Aviso de soporte: AngularJS alcanzรณ fin de vida el 31 de diciembre de 2021 y no recibe mรกs parches ni correcciones de seguridad. La directiva que aparece a continuaciรณn sigue siendo vรกlida para el mantenimiento de aplicaciones AngularJS 1.x existentes; en versiones modernas Angular el equivalente es <router-outlet>.
ยฟQuรฉ es una vista?
Una vista es el contenido que se muestra al usuario. Sea lo que sea que el usuario quiera ver, se mostrarรก la vista correspondiente de la aplicaciรณn.
La combinaciรณn de vistas y rutas divide una aplicaciรณn en vistas lรณgicas y vincula cada una a una controlador, lo que hace que la aplicaciรณn sea mรกs manejable.
Imaginemos una aplicaciรณn de pedidos en la que un cliente puede ver sus pedidos y realizar otros nuevos. El siguiente diagrama muestra cรณmo se convierte en una aplicaciรณn de una sola pรกgina.
En lugar de dos pรกginas web separadas, una para โVer pedidosโ y otra para โNuevos pedidosโ, AngularJS utiliza dos vistas en la misma pรกgina, a las que se accede a travรฉs de dos enlaces de referencia, #show y #new:
- Navegando a
MyApp/#showMuestra la vista "Ver pedidos" sin salir de la pรกgina. Solo se actualiza esa secciรณn de la pรกgina actual. - Navegando a
MyApp/#newHace lo mismo para la vista de Nuevos Pedidos.
Separar una aplicaciรณn en vistas de esta manera la hace manejable y fรกcil de modificar, y cada vista tiene un controlador correspondiente que contiene la lรณgica de negocio para esa funciรณn.
Directiva ng-view en AngularJS
El ngVer Directivas complementa el $route servicio mediante la inclusiรณn de la plantilla renderizada de la ruta actual en el archivo de diseรฑo principal, normalmente index.html.
Cada vez que cambia la ruta actual, la vista incluida cambia con ella segรบn la $route configuraciรณn, sin que la pรกgina se recargue. Rutas Estos temas se tratan por separado; aquรญ nos centramos en aรฑadir mรบltiples vistas.
El diagrama de flujo que aparece a continuaciรณn muestra todo el proceso, que el ejemplo describe paso a paso.
Cรณmo implementar ng-view en AngularJS
Este ejemplo presenta dos opciones al usuario: mostrar un evento y agregar un evento. Al hacer clic Agregar un evento muestra la vista Agregar evento, y lo mismo se aplica a Mostrar evento.
Paso 1) Incluye el archivo angular-route como referencia de script. Este archivo es necesario para usar mรบltiples rutas y vistas, y estรก disponible en el sitio web de AngularJS.
Paso 2) Agrega las etiquetas href y la etiqueta div.
- Agregue etiquetas href que enlacen a โAgregar nuevo eventoโ y โMostrar eventoโ.
- Agregue un div que contenga el
ng-viewDirectiva para marcar la regiรณn de visualizaciรณn. La vista correspondiente se inserta allรญ cada vez que se hace clic en cualquiera de los enlaces.
Paso 3) En la etiqueta de script de AngularJS, agregue la configuraciรณn de enrutamiento.
- Cuando el usuario hace clic en el Nuevo evento enlace, AngularJS carga
add_event.html, inyecta su marcado en la vista y utilizaAddEventControllerpara la lรณgica de negocio. - Cuando el usuario hace clic en el Mostrar evento enlace, carga
show_event.htmly utilizaShowDisplayController. - El
otherwiseEsta clรกusula establece la vista predeterminada que se muestra al usuario, que en este caso es DisplayEvent.
Paso 4) Agregue controladores para procesar la lรณgica de negocio de ambas funciones. Cada uno simplemente establece un mensaje en su objeto de รกmbito, que se muestra cuando se visualiza la vista correspondiente.
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Event Registration</title> <script src="https://code.angularjs.org/1.8.3/angular.min.js"></script> <script src="https://code.angularjs.org/1.8.3/angular-route.js"></script> </head> <body ng-app="sampleApp"> <h1>Guru99 Global Event</h1> <div class="container"> <ul> <li><a href="#!/NewEvent">Add New Event</a></li> <li><a href="#!/DisplayEvent">Display Event</a></li> </ul> <div ng-view></div> </div> <script> var app = angular.module('sampleApp', ["ngRoute"]); app.config(function($routeProvider) { $routeProvider .when("/NewEvent", { templateUrl: "add_event.html", controller: "AddEventController" }) .when("/DisplayEvent", { templateUrl: "show_event.html", controller: "ShowDisplayController" }) .otherwise({ redirectTo: '/DisplayEvent' }); }); app.controller("AddEventController", function($scope) { $scope.message = "This is to Add a new Event"; }); app.controller("ShowDisplayController", function($scope) { $scope.message = "This is to display an Event"; }); </script> </body> </html>
โ ๏ธ Tres correcciones al listado original. Primero, los enlaces leen #!NewEvent sin barra mientras que las rutas se declaran como /NewEvent, por lo que nada coincidiรณ. Desde AngularJS 1.6, el prefijo hash predeterminado es !, lo que hace que la direcciรณn sea correcta #!/NewEvent โ una barra despuรฉs del signo de exclamaciรณn. Segundo, ShowDisplayController establecer el mensaje en โEsto es mostrar un eventoโ, faltando la palabra a que el texto circundante cita. Tercero, lib/bootstrap.js Se cargรณ desde una ruta relativa que no lleva a ninguna parte y nunca se utiliza, por lo que se ha eliminado.
Paso 5) Crear las pรกginas add_event.html y show_event.htmlCada uno contiene un encabezado y una expresiรณn que muestra el mensaje inyectado por su controlador.
- agregar_evento.html
<h2>Add New Event</h2> {{message}}
- mostrar_evento.html
<h2>Show Event</h2> {{message}}
Si el cรณdigo se ejecuta correctamente, se muestra la siguiente salida en el navegador.
Salida:
Errores comunes de ng-view y cรณmo solucionarlos
Casi todos los fallos de ng-view se deben al cableado del mรณdulo, al formato de la direcciรณn o a la forma en que se sirve la pรกgina, y no a la directiva en sรญ.
- La regiรณn de visualizaciรณn permanece vacรญa: <font dir="auto" style="vertical-align: inherit;">las </font>
ngRouteEl mรณdulo no figuraba como dependencia, oangular-route.jsno se cargรณ. Ambos son necesarios, y el script debe ir despuรฉsangular.min.js. - Los enlaces cambian la direcciรณn, pero no se muestra nada: El href no coincide con la ruta. Desde AngularJS 1.6 la direcciรณn necesita
#!/Route; cรณdigo antiguo escrito para la versiรณn 1.5 utilizado#/Route. - Las plantillas no se cargan debido a un error CORS: La pรกgina se abriรณ directamente desde el disco. Sรญrvela a travรฉs de HTTP, porque
templateUrlSe obtiene mediante una solicitud AJAX, el protocolo de archivos bloquea. - Solo se muestra la รบltima vista: Mรกs de un elemento lleva ng-view. AngularJS respeta una รบnica regiรณn de vista por pรกgina.
- No aparece nada en la primera carga: no
otherwiseLa clรกusula estรก configurada, por lo que una direcciรณn vacรญa no coincide con ninguna ruta.










