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.

  • ๐ŸชŸ Marcador de posiciรณn รบnico: Un elemento que lleva ng-view marca donde se inyecta cada plantilla enrutada, y solo se permite un elemento de este tipo por pรกgina.
  • ๐Ÿ”— Emparejamiento de rutas: Cada ruta especifica una plantilla (templateUrl) y un controlador, vinculando asรญ el marcado y la lรณgica para esa vista.
  • ๐Ÿ“ฆ Dependencia del mรณdulo: Las vistas requieren angular-route.js mรกs una dependencia declarada del mรณdulo ngRoute.
  • ๐ŸŽฏ Vista predeterminada: La clรกusula "de lo contrario" redirige cualquier direcciรณn que no coincida, que es lo que genera una vista en la primera carga.
  • ๐ŸŒ Servidor necesario: Las plantillas se obtienen a travรฉs de HTTP, por lo que la pรกgina debe servirse en lugar de abrirse desde el sistema de archivos.
  • โš ๏ธ Estado del soporte: AngularJS llegรณ al final de su ciclo de vida el 31 de diciembre de 2021 y ya no recibe mรกs parches de seguridad.

Directiva ng-view de AngularJS

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.

ยฟQuรฉ es una vista?

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/#show Muestra la vista "Ver pedidos" sin salir de la pรกgina. Solo se actualiza esa secciรณn de la pรกgina actual.
  • Navegando a MyApp/#new Hace 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.

Directiva ng-view en AngularJS

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.

Incluya el archivo angular-route

Paso 2) Agrega las etiquetas href y la etiqueta div.

  1. Agregue etiquetas href que enlacen a โ€œAgregar nuevo eventoโ€ y โ€œMostrar eventoโ€.
  2. Agregue un div que contenga el ng-view Directiva 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.

Agregar etiquetas href y etiqueta div

Paso 3) En la etiqueta de script de AngularJS, agregue la configuraciรณn de enrutamiento.

  1. Cuando el usuario hace clic en el Nuevo evento enlace, AngularJS carga add_event.html, inyecta su marcado en la vista y utiliza AddEventController para la lรณgica de negocio.
  2. Cuando el usuario hace clic en el Mostrar evento enlace, carga show_event.html y utiliza ShowDisplayController.
  3. El otherwise Esta clรกusula establece la vista predeterminada que se muestra al usuario, que en este caso es DisplayEvent.

Configuraciรณn de enrutamiento

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.

Agregar controladores

<!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

agregar_evento.html

<h2>Add New Event</h2>

{{message}}
  • mostrar_evento.html

mostrar_evento.html

<h2>Show Event</h2>

{{message}}

Si el cรณdigo se ejecuta correctamente, se muestra la siguiente salida en el navegador.

Salida:

Salida de ng-view

Salida de ng-view

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> ngRoute El mรณdulo no figuraba como dependencia, o angular-route.js no se cargรณ. Ambos son necesarios, y el script debe ir despuรฉs angular.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 templateUrl Se 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 otherwise La clรกusula estรก configurada, por lo que una direcciรณn vacรญa no coincide con ninguna ruta.

Preguntas Frecuentes

No. ngRoute admite una รบnica regiรณn de vista por pรกgina. Para varias regiones con nombre a la vez, utilice la biblioteca ui-router, que proporciona ui-view y admite vistas anidadas y hermanas.

Habilitar el modo HTML5 con $locationProvider.html5Mode(true) y agregar una etiqueta base. El servidor debe entonces redirigir las rutas desconocidas a index.html; de lo contrario, al actualizar la pรกgina se devolverรก un error 404.

En gran parte. AI Las herramientas convierten las tablas de rutas en matrices de rutas de Angular y reemplazan ng-view por router-outlet. Los controladores aรบn deben reescribirse manualmente como componentes.

Los asistentes de IA comprueban rรกpidamente los tres sospechosos habituales: una dependencia ngRoute faltante, un prefijo hash que no coincide con la ruta y una ruta de plantilla que el navegador no puede obtener.

Sรญ. Aรฑadir un resolve Bloquea la ruta. AngularJS espera a que esas promesas se resuelvan antes de instanciar el controlador, lo que evita que la vista parpadee vacรญa mientras llegan los datos.

Resumir este post con: