AngularJS ng-include: Inkluder HTML-filer med eksempel

⚡ Smart oppsummering

ng-include i AngularJS henter, kompilerer og injiserer et eksternt HTML-fragment på hovedsiden, slik at delt markup som en tabell, en topptekst eller en bunntekst ligger i én gjenbrukbar delvis fil.

  • 🔘 Direktivrolle: ng-include henter et eksternt fragment og setter det inn som underordnede noder til vertselementet.
  • ☑️ Sitert sti: src-verdien er et uttrykk, så et litteralt filnavn trenger enkle anførselstegn i attributtet.
  • Utarbeidet eksempel: Table.html gjengis via ng-repeat når Main.html injiserer den i kontrollerens div.
  • 🧪 Nytt underordnet omfang: Hver include bygger et underordnet omfang, så primitive bindinger krever punktnotasjon.
  • 🛠️ Blankt inkluderer: Regler for samme opprinnelse, $sce og filtilgang forklarer de fleste tomme resultater.
  • 📊 Versjonsmerknad: Støtten for AngularJS ble avsluttet i januar 2022; moderne Angular komponerer komponenter i stedet.

ng-include-direktivet i AngularJS injiserer en ekstern HTML-fil i hovedmalen

Som standard gir HTML ikke mulighet til å inkludere klientsidekode fra andre filer. Det er normalt en god praksis i et hvilket som helst programmeringsspråk å distribuere funksjonalitet på tvers av ulike filer for alle programmer.

For eksempel, hvis du hadde logikk for numeriske operasjoner, vil du normalt ha denne funksjonaliteten definert i en separat fil. Den separate filen kan deretter gjenbrukes på tvers av flere applikasjoner ved bare å inkludere den filen.

Dette er vanligvis konseptet Ta med utsagn som er tilgjengelige i programmerings språk som .Net og Java.

Denne veiledningen ser på andre måter filer (filer som inneholder eksterne HTML kode) kan inkluderes i hoved-HTML-filen.

Klientsiden inkluderer

En av de vanligste måtene å inkludere HTML-kode på er via JavaManus. JavaScript er et programmeringsspråk som kan brukes til å manipulere innholdet på en HTML-side i farten. Derfor, JavaSkript kan også brukes til å inkludere kode fra andre filer.

Trinnene nedenfor viser hvordan dette kan oppnås.

Trinn 1) Definer en fil kalt Sub.html og legg til følgende kode i filen.

<div>
	This is an included file
</div>

Trinn 2) Lag en fil kalt Sample.html, som er hovedprogramfilen din, og legg til kodebiten nedenfor.

Nedenfor er hovedaspektene å merke seg om koden nedenfor,

  1. I body-taggen er det en div-tag som har en ID for innhold. Dette er stedet der koden fra den eksterne filen 'Sub.html' vil bli satt inn.
  2. Det er en referanse til et jQuery-skript. jQuery er et skriptspråk bygget oppå JavaSkript som gjør DOM-manipulering enda enklere.
  3. på JavaSkriptfunksjonen, det finnes en setning '$(“#Content”).load(“Sub.html”);' som fører til at koden i filen Sub.html injiseres i div-taggen som har ID-en Content.
    <html> 
    	  <head> 
    	    <script src="jquery.js"></script> 
    	    <script> 
    	    $(function(){
    	      $("#Content").load("Sub.html"); 
    	    });
        </script> 
      </head> 
    
    <body> 
         <div id="Content"></div>
      </body> 
    </html>

Serverside inkluderer

Server Side Includes er også tilgjengelige for å inkludere en felles kodebit på hele et nettsted. Dette gjøres vanligvis for å inkludere innhold i delene nedenfor av et HTML-dokument.

  1. Sideoverskrift
  2. Sidebunntekst
  3. Navigasjonsmeny.

For at en webserver skal kunne gjenkjenne en Server Side Include, må filnavnene ha spesielle filtyper. De aksepteres vanligvis av webserveren, for eksempel .shtml, .stm, .shtm, .cgi.

Direktivet som brukes for å inkludere innhold er «include-direktivet». Et eksempel på include-direktivet er vist nedenfor:

<!--#include virtual="navigation.cgi" -->
  • Ovennevnte direktiv tillater at innholdet i ett dokument kan inkluderes i et annet.
  • Den "virtuelle" kommandoen over koden brukes til å spesifisere målet i forhold til domeneroten til applikasjonen.
  • Til den virtuelle parameteren er det også filparameteren som kan brukes. "Fil"-parametrene brukes når man trenger å spesifisere banen i forhold til katalogen til den gjeldende filen.

OBS:

Den virtuelle parameteren brukes til å spesifisere filen (HTML-side, tekstfil, skript osv.) som må inkluderes. Hvis webserverprosessen ikke har tilgang til å lese filen eller utføre skriptet, vil include-kommandoen mislykkes. Det "virtuelle" ordet er et nøkkelord som må plasseres i inkluderingsdirektivet.

Hvordan inkludere HTML-fil i AngularJS

AngularJS gir funksjonen til å inkludere funksjonaliteten fra andre AngularJS-filer ved å bruke ng-include Direktiver.

Hovedformålet med «ng-include»-direktivet er å hente, kompilere og inkludere et eksternt HTML-fragment i hovedapplikasjonen for AngularJS.

Versjonsmerknad: AngularJS 1.x forlot langtidsstøtten 31. desember 2021, og rammeverksteamet oppgir at AngularJS-støtten er offisielt avsluttet i januar 2022, så ingen utgivelser eller sikkerhetsoppdateringer følger. Hvert trinn og kodeblokk nedenfor forblir nøyaktig slik den er publisert, som den historiske referansen. Moderne Angular har ingen direkte erstatning: markup er satt sammen av komponenter, og et fragment plukket under kjøretid gjengis med ng-container og ngComponentOutlet.

La oss se på kodebasen nedenfor og forklare hvordan dette kan oppnås ved hjelp av AngularJS.

Trinn 1) la oss skrive koden nedenfor i en fil som heter Table.html. Dette er filen som vil bli injisert i hovedapplikasjonsfilen vår ved å bruke ng-include-direktivet.

Kodestykket nedenfor antar at det finnes en omfangsvariabel kalt «tutorial». Deretter bruker den ng-gjenta direktiv, som går gjennom hvert emne i variabelen «tutorial» og viser verdiene for «Navn» og «Description' nøkkel-verdi-par.

<table>
    <tr ng-repeat="Topic in tutorial">
        <td>{{ Topic.Name }}</td>
        <td>{{ Topic.Description }}</td>
    </tr>
</table>

Trinn 2) La oss skrive koden nedenfor i en fil som heter Main.html. Dette er et enkelt AngularJS-program som har følgende aspekter.

  1. Bruk "ng-include-direktivet" for å injisere koden i den eksterne filen 'Table.html'. Uttalelsen er uthevet med fet skrift i koden nedenfor. Så div-taggen ' ' erstattes av hele koden i 'Table.html'-filen.
  2. controller, opprettes en «veiledningsvariabel» som en del av $scope-objektet. Denne variabelen inneholder en liste over nøkkelverdipar.

I vårt eksempel er nøkkelverdiparene

  1. Navn – Dette angir navnet på et emne som kontroller, modeller og direktiver.
  2. Description – Dette gir en beskrivelse av hvert emne

Opplæringsvariabelen er også tilgjengelig i 'Table.html'-filen.

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

Når du utfører koden ovenfor, vil du få følgende utgang.

Produksjon:

Skjermbildet nedenfor viser det gjengitte resultatet: nettleserfanen har tittelen Hendelsesregistrering, overskriften er plassert over den injiserte tabellen, og de tre radene er trukket fra veiledningsarrayet i Main.html gjennom den delvise tabellen. Det kommenterte skjermbildet staver overskriften Gur99 mens koden skriver Guru99.

Nettleserutdata fra AngularJS ng-include-eksemplet som viser emnetabellen injisert fra Table.html

ng-include-attributter: src, onload og autoscroll

Utover filnavnet godtar direktivet to valgfrie attributter, og det kan skrives på tre måter: som et attributt på et hvilket som helst element, som et <ng-include> element, eller som en CSS-klasse. Referansen nedenfor følger den offisielle ngInkluder dokumentasjon.

Egenskap Påkrevd Hva det gjør
src eller ng-include Ja Uttrykk som evalueres til malen URL
last ned Nei Uttrykk evalueres hver gang en ny del av et uttrykk er ferdig lastet
automatisk rulling Nei Kaller $anchorScroll etter at innholdet er lastet inn; utelatelse av attributtet deaktiverer rulling
<div ng-include="'Table.html'" onload="loaded = true" autoscroll></div>
<ng-include src="templateUrl"></ng-include>

Den vanligste feilen følger fra første rad: src tar en uttrykk, ikke en ren streng. En litteral sti trenger derfor sine egne anførselstegn inne i attributtet, og det er derfor eksemplet ovenfor lyder ng-include="'Table.html'". Skrive ng-include="Table.html" får AngularJS til å evaluere Table som en omfangsegenskap, finn ingenting, og la elementet stå tomt.

Hvorfor ng-include oppretter et nytt underordnet omfang

Direktivet limer ikke inn markup i det omkringliggende omfanget. Hver inkludering oppretter et nytt underordnet element. omfang som arver prototypisk fra omfanget den ble deklarert i, og det ene faktum forklarer de fleste bindende overraskelser.

Lesingen fungerer som forventet. Delen ovenfor leses tutorial rett fra foreldrene, og det er derfor ng-repeat finner matrisen. Det er ved å skrive den går i stykker: når en partiell verdi tilordnes til en primitiv verdi, som med ng-model="topic", AngularJS oppretter topic på barneomfanget og den overordnede kopien endres aldri.

To vaner unngår fellen:

  • Bind gjennom et objekt, som i ng-model="data.topic", slik at forelder og barn når samme referanse.
  • Hold tilstanden i en kontroller eller en tjeneste og eksponer funksjoner i stedet for nakne primitiver.

Inkluderingen avgir også $includeContentRequested, $includeContentLoaded og $includeContentError, slik at en forelder kan reagere gjennom $scope.$on uten å nå inn i barnets omfang i det hele tatt.

Slik fikser du en tom eller mislykket ng-include

En inkludering som ikke gjengir noe mislykkes vanligvis av én av flere grunner. Jobb deg gjennom dem i denne rekkefølgen.

  1. Sjekk sitatene. Et litteralt filnavn trenger enkle anførselstegn i attributtverdien. Uten dem blir uttrykket oppløst til udefinert, og ingen forespørsel sendes noen gang.
  2. Server siden over HTTP. Direktivet utsteder en XHR for den delvise filen, så åpning av Main.html direkte fra disk via en filadresse mislykkes i de fleste nettlesere. Enhver lokal webserver fjerner dette.
  3. Bekreft at banen løser seg. Se etter forespørselen i nettverkspanelet. En 404-feil betyr at banen er relativ til siden som er vert for inkluderingen, ikke til den delvise siden som refererer til den.
  4. Respekter regelen om samme opprinnelse. Som standard er malen URL må samsvare med domenet og protokollen til applikasjonsdokumentet, fordi AngularJS sender det gjennom $sce.getTrustedResourceUrlEn mal fra et annet sted trenger en oppføring i den klarerte ressursen. URL liste, eller en eksplisitt trustAsResourceUrl-wrapper, og den eksterne serveren må fortsatt sende CORS-overskrifter.
  5. Lytt etter feilen. $includeContentError utløses når svarstatusen faller utenfor 200 til 299, og gjør et stille tomt område om til en melding som er verdt å logge.

En annen årsak er lett å overse. AngularJS beholder alle hentede partielle filer i $templateCache, slik at en redigert fil kan fortsette å vise foreldet markup inntil hurtigbufferoppføringen fjernes eller siden lastes inn på nytt fra kildekoden. Når et fragment trenger sin egen oppførsel i stedet for bare markup, vil en tilpasset direktiv med sin egen mal og isolerte omfang er det bedre verktøyet.

Spørsmål og svar

ng-include injiserer et fragment du navngir selv, hvor som helst på siden. ng-view gjengir hvilken som helst mal router kart til gjeldende URL, og bare én ng-visning hører hjemme i et layout.

Nei. En delvis del inneholder bare et fragment.ping I html-koder etterlater head- eller body-tagger tilfeldige elementer, fordi markupen settes inn som underordnede noder til vertselementet i stedet for å analyseres som et dokument.

Nei. Fragmentet kompileres og settes inn som DOM-noder, slik at innebygde skriptelementer aldri kjøres. Last inn delte skript fra vertssiden, eller flytt virkemåten til en kontroller eller et direktiv.

Ja. Med ngAnimate lastet, utløser direktivet en enter-animasjon på det innkommende fragmentet og en leave-animasjon på det utgående, og de to kjører samtidig når kildeuttrykket endres.

Ja. Fordi verdien er et uttrykk, vil det å peke den på en omfangsegenskap bytte fragmentet hver gang egenskapen endres. Beskytt elementet med ng – hvis det er tilfelle, lastes ingenting inn før egenskapen har en reell bane.

Ingen tilsvarende finnes. Gjenbrukbar markup blir en komponent, og et fragment valgt under kjøring gjengis gjennom ngComponentOutlet eller ngTemplateOutlet inne i en ng-container.

Språkmodeller leser et eldre malsett og grupperer partielle verdier, kontrollere og bindinger i kandidatkomponenter, og foreslår deretter en migreringsrekkefølge. Behandle utdataene som et førsteutkast, fordi omfangsarv sjelden tilordnes rent til komponentinndata.

GitHub Copilot Agentmodus konverterer en partiell komponent til en frittstående komponent med typede inndata og skriver om vertsmalen, men de genererte bindingene og testene trenger fortsatt menneskelig gjennomgang.

Oppsummer dette innlegget med: