AngularJS ng-view com exemplo

โšก Resumo Inteligente

Em AngularJS, as views permitem que uma pรกgina troque seu conteรบdo em vez de navegar para outra, o que proporciona a sensaรงรฃo de instantaneamente uma aplicaรงรฃo de pรกgina รบnica. A diretiva `ng-view` marca a regiรฃo que cada rota substitui por seu prรณprio template e controlador.

  • ๐ŸชŸ Espaรงo reservado รบnico: Um elemento contendo ng-view marca o local onde cada modelo roteado รฉ injetado, e apenas um elemento desse tipo รฉ permitido por pรกgina.
  • ๐Ÿ”— Emparelhamento de rotas: Cada rota nomeia um templateUrl e um controlador, vinculando a marcaรงรฃo e a lรณgica para essa visualizaรงรฃo.
  • ๐Ÿ“ฆ Dependรชncia do mรณdulo: As visualizaรงรตes exigem o arquivo angular-route.js, alรฉm de uma dependรชncia declarada do mรณdulo ngRoute.
  • ๐ŸŽฏ Visualizaรงรฃo padrรฃo: A clรกusula `otherwise` redireciona qualquer endereรงo nรฃo correspondente, que รฉ o que renderiza uma visualizaรงรฃo no primeiro carregamento.
  • ๐ŸŒ Servidor necessรกrio: Os modelos sรฃo obtidos via HTTP, portanto a pรกgina precisa ser servida em vez de aberta a partir do sistema de arquivos.
  • โš ๏ธ Status do suporte: O AngularJS chegou ao fim de sua vida รบtil em 31 de dezembro de 2021 e nรฃo receberรก mais atualizaรงรตes de seguranรงa.

Diretiva ng-view do AngularJS

Locais conhecidos como Gmail Utilize o conceito de Single Page Applications (SPAs). Quando um usuรกrio solicita uma pรกgina diferente, o aplicativo nรฃo navega para outra pรกgina; ele exibe a visualizaรงรฃo da nova pรกgina dentro da pรกgina existente, dando a impressรฃo de que o usuรกrio nunca saiu. O mesmo รฉ alcanรงado no AngularJS usando views em conjunto com rotas.

โš ๏ธ Aviso de suporte: AngularJS alcanรงou fim da vida em 31 de dezembro de 2021 e nรฃo recebe mais patches ou correรงรตes de seguranรงa. A diretiva abaixo permanece vรกlida para a manutenรงรฃo de aplicaรงรตes AngularJS 1.x existentes; em versรตes modernas. Angular o equivalente รฉ <router-outlet>.

O que รฉ uma visรฃo?

Uma visualizaรงรฃo รฉ o conteรบdo mostrado ao usuรกrio. Aquilo que o usuรกrio deseja ver, a visualizaรงรฃo correspondente do aplicativo รฉ exibida.

A combinaรงรฃo de visualizaรงรตes e rotas divide uma aplicaรงรฃo em visualizaรงรตes lรณgicas e vincula cada uma a uma rota. controlador, o que torna a aplicaรงรฃo mais gerenciรกvel.

Considere um aplicativo de pedidos no qual o cliente pode visualizar pedidos e fazer novos. O diagrama abaixo mostra como ele se torna um aplicativo de pรกgina รบnica.

O que รฉ uma visรฃo

Em vez de duas pรกginas web separadas, uma para โ€œVer Pedidosโ€ e outra para โ€œNovos Pedidosโ€, AngularJS Utiliza duas visualizaรงรตes na mesma pรกgina, acessรญveis atravรฉs de dois links de referรชncia. #show e #new:

  • Navegando para MyApp/#show Exibe a visualizaรงรฃo de pedidos sem sair da pรกgina. Apenas essa seรงรฃo da pรกgina atual รฉ atualizada.
  • Navegando para MyApp/#new Faz o mesmo para a visualizaรงรฃo de Novos Pedidos.

Separar uma aplicaรงรฃo em visualizaรงรตes dessa forma a torna gerenciรกvel e fรกcil de modificar, e cada visualizaรงรฃo tem um controlador correspondente que contรฉm a lรณgica de negรณcios para essa funรงรฃo.

Diretiva ng-view em AngularJS

O ngView Directivas complementa o $route serviรงo, incluindo o modelo renderizado da rota atual no arquivo de layout principal, normalmente index.html.

Cada vez que a rota atual muda, a visualizaรงรฃo incluรญda muda com ela, de acordo com o $route Configuraรงรฃo, sem que a prรณpria pรกgina seja recarregada. rotas sรฃo abordados separadamente; aqui o foco รฉ adicionar mรบltiplas visualizaรงรตes.

O fluxograma abaixo mostra todo o processo, que o exemplo descreve passo a passo.

Diretiva ng-view em AngularJS

Como implementar o ng-view em AngularJS

Este exemplo apresenta duas opรงรตes ao usuรกrio: exibir um evento e adicionar um evento. Clicando Adicionar um evento Exibe a visualizaรงรฃo Adicionar Evento, e o mesmo se aplica ร  visualizaรงรฃo Exibir Evento.

Passo 1) Inclua o arquivo angular-route como uma referรชncia de script. Este arquivo รฉ necessรกrio para usar vรกrias rotas e visualizaรงรตes e estรก disponรญvel no site do AngularJS.

Inclua o arquivo angular-route

Passo 2) Adicione as tags href e a tag div.

  1. Adicione tags href com links para โ€œAdicionar novo eventoโ€ e โ€œExibir eventoโ€.
  2. Adicione uma div contendo o ng-view Diretiva para marcar a regiรฃo de visualizaรงรฃo. A visualizaรงรฃo correspondente รฉ inserida ali sempre que um dos links รฉ clicado.

Adicione tags href e tag div.

Passo 3) Na tag de script do AngularJS, adicione a configuraรงรฃo de roteamento.

  1. Quando o usuรกrio clicar no NovoEvento link, AngularJS carrega add_event.html, injeta sua marcaรงรฃo na visualizaรงรฃo e usa AddEventController para a lรณgica de negรณcios.
  2. Quando o usuรกrio clicar no Evento de exibiรงรฃo link, ele carrega show_event.html e usa ShowDisplayController.
  3. O otherwise A clรกusula define a visualizaรงรฃo padrรฃo exibida ao usuรกrio, que neste caso รฉ DisplayEvent.

Configuraรงรฃo de roteamento

Passo 4) Adicione controladores para processar a lรณgica de negรณcios de ambas as funรงรตes. Cada um simplesmente define uma mensagem em seu objeto de escopo, exibida quando a visualizaรงรฃo correspondente for mostrada.

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

โš ๏ธ Trรชs correรงรตes ao anรบncio original. Primeiro, os links diziam #!NewEvent sem barra, enquanto as rotas sรฃo declaradas como /NewEvent, portanto, nada correspondeu. A partir do AngularJS 1.6, o prefixo de hash padrรฃo รฉ !, o que torna o endereรงo correto #!/NewEvent โ€” uma barra apรณs o ponto de exclamaรงรฃo. Segundo, ShowDisplayController Defina a mensagem como โ€œIsto รฉ exibir um eventoโ€, faltando a palavra. para que o texto circundante cita. Terceiro, lib/bootstrap.js O arquivo foi carregado a partir de um caminho relativo que nรฃo resolve em lugar nenhum e nunca รฉ usado, portanto foi removido.

Passo 5) Crie as pรกginas add_event.html e show_event.htmlCada um contรฉm um cabeรงalho e uma expressรฃo que exibe a mensagem injetada pelo seu controlador.

  • add_event.html

add_event.html

<h2>Add New Event</h2>

{{message}}
  • show_event.html

show_event.html

<h2>Show Event</h2>

{{message}}

Se o cรณdigo for executado com sucesso, a seguinte saรญda serรก exibida no navegador.

Saรญda:

saรญda ng-view

saรญda ng-view

Erros comuns do ng-view e como corrigi-los

Quase todas as falhas do ng-view decorrem da configuraรงรฃo do mรณdulo, do formato do endereรงo ou da forma como a pรกgina estรก sendo servida, e nรฃo da prรณpria diretiva.

  • A รกrea de visualizaรงรฃo permanece vazia: da ngRoute O mรณdulo nรฃo foi listado como uma dependรชncia, ou angular-route.js nรฃo foi carregado. Ambos sรฃo necessรกrios, e o script deve vir depois. angular.min.js.
  • Os links alteram o endereรงo, mas nada รฉ exibido: O href nรฃo corresponde ร  rota. A partir do AngularJS 1.6, o endereรงo precisa... #!/Route; cรณdigo antigo escrito para a versรฃo 1.5 usado #/Route.
  • Os modelos nรฃo carregam devido a um erro de CORS: A pรกgina foi aberta diretamente do disco. Sirva-a via HTTP, porque templateUrl O arquivo รฉ obtido por meio de uma solicitaรงรฃo AJAX e o protocolo de arquivo รฉ bloqueado.
  • Apenas a รบltima imagem รฉ exibida: Mais de um elemento carrega ng-view. O AngularJS respeita apenas uma regiรฃo de visualizaรงรฃo por pรกgina.
  • Nada aparece no primeiro carregamento: nรฃo otherwise A clรกusula estรก configurada, portanto, um endereรงo vazio nรฃo corresponde a nenhuma rota.

Perguntas Frequentes

Nรฃo. O ngRoute suporta apenas uma regiรฃo de visualizaรงรฃo por pรกgina. Para vรกrias regiรตes nomeadas simultaneamente, use a biblioteca ui-router, que fornece a interface ui-view e suporta visualizaรงรตes aninhadas e irmรฃs.

Ative o modo HTML5 com $locationProvider.html5Mode(true) e adicione uma tag base. O servidor deve entรฃo reescrever os caminhos desconhecidos para index.html; caso contrรกrio, uma atualizaรงรฃo retornarรก um erro 404.

Em grande parte. AI As ferramentas convertem as tabelas de rotas em arrays de rotas do Angular e substituem o ng-view pelo router-outlet. Os controladores ainda precisam ser reescritos manualmente como componentes.

Os assistentes de IA verificam rapidamente os trรชs suspeitos de sempre: uma dependรชncia ngRoute ausente, um prefixo de hash que nรฃo corresponde ร  rota e um caminho de modelo que o navegador nรฃo consegue buscar.

Sim. Adicione um resolve O AngularJS bloqueia a rota. Ele espera que essas promessas sejam resolvidas antes de instanciar o controlador, o que evita que a visualizaรงรฃo fique vazia enquanto os dados chegam.

Resuma esta postagem com: