AngularJS ng-include: Incluir arquivos HTML com exemplo
โก Resumo Inteligente
Em AngularJS, o ng-include busca, compila e injeta um fragmento HTML externo na pรกgina principal, de forma que a marcaรงรฃo compartilhada, como uma tabela, um cabeรงalho ou um rodapรฉ, fique em um รบnico arquivo parcial reutilizรกvel.
Por padrรฃo, o HTML nรฃo oferece a possibilidade de incluir cรณdigo do lado do cliente de outros arquivos. Normalmente รฉ uma boa prรกtica em qualquer linguagem de programaรงรฃo distribuir funcionalidades entre vรกrios arquivos para qualquer aplicativo.
Por exemplo, se vocรช tivesse lรณgica para operaรงรตes numรฉricas, normalmente desejaria ter essa funcionalidade definida em um arquivo separado. Esse arquivo separado poderia entรฃo ser reutilizado em vรกrios aplicativos apenas incluindo esse arquivo.
Este รฉ normalmente o conceito de Incluir declaraรงรตes que estรฃo disponรญveis em linguagens de programaรงรฃo tais como .Net e Java.
Este tutorial analisa outras maneiras de lidar com arquivos (arquivos que contรชm informaรงรตes externas). HTML O cรณdigo pode ser incluรญdo no arquivo HTML principal.
Lado do cliente inclui
Uma das maneiras mais comuns de incluir cรณdigo HTML รฉ atravรฉs de JavaRoteiro. JavaScript รฉ uma linguagem de programaรงรฃo que pode ser usada para manipular o conteรบdo de uma pรกgina HTML dinamicamente. Por isso, JavaO script tambรฉm pode ser usado para incluir cรณdigo de outros arquivos.
Os passos abaixo mostram como isso pode ser feito.
Passo 1) Defina um arquivo chamado Sub.html e adicione o seguinte cรณdigo ao arquivo.
<div> This is an included file </div>
Passo 2) Crie um arquivo chamado Sample.html, que รฉ o arquivo principal do seu aplicativo e adicione o trecho de cรณdigo abaixo.
Abaixo estรฃo os principais aspectos a serem observados sobre o cรณdigo abaixo,
- Na tag body, hรก uma tag div que possui um id de Conteรบdo. Este รฉ o local onde serรก inserido o cรณdigo do arquivo externo 'Sub.html'.
- Hรก uma referรชncia a um script jQuery. jQuery รฉ uma linguagem de script construรญda sobre... JavaScript que facilita ainda mais a manipulaรงรฃo do DOM.
- De acordo com o relatรณrio JavaNa funรงรฃo de script, existe uma instruรงรฃo '$(โ#Contentโ).load(โSub.htmlโ);' que faz com que o cรณdigo do arquivo Sub.html seja inserido na tag div que possui o id "Content".
<html> <head> <script src="jquery.js"></script> <script> $(function(){ $("#Content").load("Sub.html"); }); </script> </head> <body> <div id="Content"></div> </body> </html>
O lado do servidor inclui
As inclusรตes do lado do servidor tambรฉm estรฃo disponรญveis para incluir um trecho de cรณdigo comum em um site. Isso normalmente รฉ feito para incluir conteรบdo nas partes abaixo de um documento HTML.
- Cabeรงalho da pรกgina
- Rodapรฉ da pรกgina
- Menu de navegaรงรฃo.
Para que um servidor web reconheรงa um arquivo Server Side Include (SSI), os nomes dos arquivos devem ter extensรตes especiais. Geralmente, o servidor web aceita extensรตes como .shtml, .stm, .shtm e .cgi.
A diretiva usada para incluir conteรบdo รฉ a โdiretiva includeโ. Um exemplo da diretiva include รฉ mostrado abaixo:
<!--#include virtual="navigation.cgi" -->
- A diretiva acima permite que o conteรบdo de um documento seja incluรญdo em outro.
- O comando โvirtualโ acima do cรณdigo รฉ usado para especificar o destino relativo ร raiz do domรญnio do aplicativo.
- Alรฉm disso, para o parรขmetro virtual, existe tambรฉm o parรขmetro de arquivo que pode ser usado. Os parรขmetros โarquivoโ sรฃo utilizados quando รฉ necessรกrio especificar o caminho relativo ao diretรณrio do arquivo atual.
Observaรงรฃo:
O parรขmetro virtual รฉ usado para especificar o arquivo (pรกgina HTML, arquivo de texto, script, etc.) que precisa ser incluรญdo. Se o processo do servidor web nรฃo tiver acesso para ler o arquivo ou executar o script, o comando include falharรก. A palavra 'virtual' รฉ uma palavra-chave que deve ser colocada na diretiva include.
Como incluir arquivo HTML em AngularJS
AngularJS Fornece a funรงรฃo para incluir a funcionalidade de outros arquivos AngularJS usando o ng-include. Directivas.
O objetivo principal da diretiva โng-includeโ รฉ buscar, compilar e incluir um fragmento HTML externo na aplicaรงรฃo AngularJS principal.
Nota de versรฃo: O AngularJS 1.x deixou de ter suporte de longo prazo em 31 de dezembro de 2021, e a equipe do framework afirma que O suporte ao AngularJS foi oficialmente encerrado. Em janeiro de 2022, portanto, nรฃo haverรก atualizaรงรตes ou correรงรตes de seguranรงa subsequentes. Cada etapa e bloco de cรณdigo abaixo permanece exatamente como publicado, servindo como referรชncia histรณrica. O Angular moderno nรฃo oferece uma substituiรงรฃo direta: a marcaรงรฃo รฉ composta de componentes e um fragmento selecionado em tempo de execuรงรฃo รฉ renderizado com ng-container e ngComponentOutlet.
Vamos analisar o cรณdigo abaixo e explicar como isso pode ser feito usando AngularJS.
Passo 1) vamos escrever o cรณdigo abaixo em um arquivo chamado Table.html. Este รฉ o arquivo que serรก injetado em nosso arquivo principal do aplicativo usando a diretiva ng-include.
O trecho de cรณdigo abaixo pressupรตe que exista uma variรกvel de escopo chamada โtutorialโ. Em seguida, ele usa a ng-repetir diretiva, que percorre cada tรณpico na variรกvel โtutorialโ e exibe os valores para 'Nome' e 'Descriptpar chave-valor 'ion'.
<table>
<tr ng-repeat="Topic in tutorial">
<td>{{ Topic.Name }}</td>
<td>{{ Topic.Description }}</td>
</tr>
</table>
Passo 2) Vamos escrever o cรณdigo abaixo em um arquivo chamado Main.html. Este รฉ um aplicativo AngularJS simples que possui os seguintes aspectos.
- Use a โdiretiva ng-includeโ para injetar o cรณdigo no arquivo externo 'Table.html'. A declaraรงรฃo foi destacada em negrito no cรณdigo abaixo. Entรฃo a tag div ' ' serรก substituรญdo por todo o cรณdigo no arquivo 'Table.html'.
- De acordo com o relatรณrio controladorUma variรกvel "tutorial" รฉ criada como parte do objeto $scope. Essa variรกvel contรฉm uma lista de pares chave-valor.
Em nosso exemplo, os pares de valores-chave sรฃo
- Nome โ denota o nome de um tรณpico como Controladores, Modelos e Diretivas.
- Description โ Isso fornece uma descriรงรฃo de cada tรณpico
A variรกvel tutorial tambรฉm รฉ acessada no arquivo 'Table.html'.
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Event Registration</title>
<script src="http://ajax.googleapis.com/ajax/libs/angularjs/1.6.4/angular.min.js"></script>
</head>
<body ng-app="sampleApp">
<div ng-controller="AngularController">
<h3> Guru99 Global Event</h3>
<div ng-include="'Table.html'"></div>
</div>
<script>
var sampleApp = angular.module('sampleApp',[]);
sampleApp.controller('AngularController', function($scope) {
$scope.tutorial =[
{Name: "Controllers" , Description : "Controllers in action"},
{Name: "Models" , Description : "Models and binding data"},
{Name: "Directives" , Description : "Flexibility of Directives"}
];
});
</script>
</body>
</html>
Ao executar o cรณdigo acima, vocรช obterรก a seguinte saรญda.
saรญda:
A captura de tela abaixo mostra o resultado renderizado: a aba do navegador exibe o tรญtulo "Event Registration" (Inscriรงรฃo no Evento), o cabeรงalho fica acima da tabela inserida e as trรชs linhas sรฃo extraรญdas do array do tutorial em Main.html por meio do partial. A captura de tela anotada mostra o tรญtulo "Gur99", enquanto o cรณdigo escreve Guru99.
Atributos do ng-include: src, onload e autoscroll
Alรฉm do nome do arquivo, a diretiva aceita dois atributos opcionais e pode ser escrita de trรชs maneiras: como um atributo em qualquer elemento, como um atributo em um elemento ou como um atributo em um elemento. <ng-include> elemento, ou como uma classe CSS. A referรชncia abaixo segue o padrรฃo oficial. Documentaรงรฃo do ngInclude.
| Atributo | Exigido | O que ele faz |
|---|---|---|
| src ou ng-include | Sim | Expressรฃo que avalia para o modelo URL |
| carregando | Nรฃo | A expressรฃo รฉ avaliada cada vez que uma nova parte termina de carregar. |
| rolagem automรกtica | Nรฃo | Chama a funรงรฃo `$anchorScroll` apรณs o carregamento do conteรบdo; omitir o atributo desativa a rolagem. |
<div ng-include="'Table.html'" onload="loaded = true" autoscroll></div> <ng-include src="templateUrl"></ng-include>
O erro mais comum decorre da primeira linha: src leva um expressรฃo, nรฃo uma string simples. Um caminho literal, portanto, precisa de suas prรณprias aspas dentro do atributo, razรฃo pela qual o exemplo acima se lรช ng-include="'Table.html'". Escrita ng-include="Table.html" faz o AngularJS avaliar Table Como propriedade de escopo, nรฃo encontre nada e deixe o elemento vazio.
Por que ng-include cria um novo escopo filho?
A diretiva nรฃo cola a marcaรงรฃo no escopo circundante. Cada inclusรฃo cria um novo filho. escopo que herda prototipicamente do escopo em que foi declarado, e esse fato explica a maioria das surpresas vinculantes.
A leitura funciona como esperado. O trecho acima diz: tutorial diretamente dos pais, e รฉ por isso ng-repeat encontra o array. O problema estรก na escrita: quando uma atribuiรงรฃo parcial รฉ feita a um tipo primitivo, como em ng-model="topic", o AngularJS cria topic no escopo filho e a cรณpia pai nunca muda.
Dois hรกbitos evitam a armadilha:
- Vincular atravรฉs de um objeto, como em
ng-model="data.topic", para que pais e filhos cheguem ร mesma referรชncia. - Armazene o estado em um controlador ou serviรงo e exponha funรงรตes em vez de tipos primitivos simples.
O include tambรฉm emite $includeContentRequested, $includeContentLoaded e $includeContentError, para que um pai possa reagir atravรฉs de $scope.$on sem sequer abordar o รขmbito infantil.
Como corrigir um ng-include em branco ou com falha
Uma inclusรฃo que nรฃo renderiza nada geralmente falha por um dos seguintes motivos. Analise-os nesta ordem.
- Confira as cotaรงรตes. Um nome de arquivo literal precisa de aspas simples dentro do valor do atributo. Sem elas, a expressรฃo resulta em `undefined` e nenhuma requisiรงรฃo รฉ enviada.
- Exiba a pรกgina via HTTP. A diretiva emite uma solicitaรงรฃo XHR para o arquivo parcial, portanto, abrir o arquivo Main.html diretamente do disco por meio de um endereรงo de arquivo falha na maioria dos navegadores. Qualquer servidor web local ignora essa diretiva.
- Confirme se o caminho foi resolvido. Observe o painel de rede para a solicitaรงรฃo. Um erro 404 significa que o caminho รฉ relativo ร pรกgina que hospeda o arquivo incluรญdo, e nรฃo ao arquivo parcial que o referencia.
- Respeite a regra da mesma origem. Por padrรฃo, o modelo URL deve corresponder ao domรญnio e protocolo do documento da aplicaรงรฃo, pois o AngularJS o repassa. $sce.getTrustedResourceUrlUm modelo proveniente de outra fonte precisa de uma entrada no recurso confiรกvel. URL lista, ou um wrapper trustAsResourceUrl explรญcito, e o servidor remoto ainda precisa enviar cabeรงalhos CORS.
- Preste atenรงรฃo ao fracasso. A exceรงรฃo `$includeContentError` รฉ acionada sempre que o status da resposta estiver fora do intervalo 200 a 299, transformando uma รกrea silenciosamente em branco em uma mensagem que vale a pena registrar.
Outra causa que รฉ fรกcil de passar despercebida. O AngularJS mantรฉm cada partial buscado em `$templateCache`, entรฃo um arquivo editado pode continuar servindo marcaรงรฃo desatualizada atรฉ que a entrada do cache seja removida ou a pรกgina seja recarregada a partir do cรณdigo-fonte. Quando um fragmento precisa de um comportamento prรณprio, em vez de apenas marcaรงรฃo, um diretiva personalizada Com seu prรณprio modelo e escopo isolado, รฉ a melhor ferramenta.

