AngularJS ng-include: Inkluder HTML-filer med eksempel

โšก Smart opsummering

ng-include i AngularJS henter, kompilerer og indsรฆtter et eksternt HTML-fragment pรฅ hovedsiden, sรฅ delt markup, sรฅsom en tabel, en header eller en footer, findes i รฉn genanvendelig delvis fil.

  • ๐Ÿ”˜ Direktiv rolle: ng-include henter et eksternt fragment og indsรฆtter det som underordnede noder til dets vรฆrtselement.
  • โ˜‘๏ธ Citatsti: src-vรฆrdien er et udtryk, sรฅ et literalt filnavn skal bruge enkelte anfรธrselstegn inde i attributten.
  • โœ… Udarbejdet eksempel: Table.html gengives via ng-repeat, nรฅr Main.html injicerer den i controller-div'en.
  • ๐Ÿงช Nyt underordnet omfang: Hver include opbygger et underordnet scope, sรฅ primitive bindinger krรฆver punktumnotation.
  • ๐Ÿ› ๏ธ Blankt inkluderer: Regler for samme oprindelse, $sce og filadgang forklarer de fleste tomme resultater.
  • ๐Ÿ“Š Versionsnotat: AngularJS-understรธttelse ophรธrte i januar 2022; moderne Angular komponerer i stedet komponenter.

ng-include-direktivet i AngularJS indsprรธjter en ekstern HTML-fil i hovedskabelonen

Som standard giver HTML ikke mulighed for at inkludere kode pรฅ klientsiden fra andre filer. Det er normalt en god praksis i ethvert programmeringssprog at distribuere funktionalitet pรฅ tvรฆrs af forskellige filer til enhver applikation.

For eksempel, hvis du havde logik til numeriske operationer, ville du normalt รธnske at have denne funktion defineret i en separat fil. Den separate fil kunne derefter genbruges pรฅ tvรฆrs af flere applikationer ved blot at inkludere den fil.

Dette er normalt begrebet Medtag udsagn som er tilgรฆngelige i programmeringssprog sรฅsom .Net og Java.

Denne vejledning ser pรฅ andre mรฅder, hvorpรฅ filer (filer, der indeholder eksterne HTML kode) kan inkluderes i den primรฆre HTML-fil.

Klientsiden inkluderer

En af de mest almindelige mรฅder at inkludere HTML-kode pรฅ er via JavaManuskript. JavaScript er et programmeringssprog, som kan bruges til at manipulere indholdet pรฅ en HTML-side i farten. Derfor, JavaScriptet kan ogsรฅ bruges til at inkludere kode fra andre filer.

Nedenstรฅende trin viser, hvordan dette kan opnรฅs.

Trin 1) Definer en fil kaldet Sub.html og tilfรธj fรธlgende kode til filen.

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

Trin 2) Opret en fil kaldet Sample.html, som er din primรฆre programfil, og tilfรธj nedenstรฅende kodestykke.

Nedenfor er de vigtigste aspekter at bemรฆrke om nedenstรฅende kode,

  1. I body-tagget er der et div-tag, som har et id pรฅ Content. Dette er stedet, hvor koden fra den eksterne fil 'Sub.html' vil blive indsat.
  2. Der er en reference til et jQuery-script. jQuery er et scriptsprog bygget oven pรฅ JavaScript der gรธr DOM-manipulation endnu nemmere.
  3. I JavaScriptfunktionen, der er en sรฆtning '$(โ€œ#Contentโ€).load(โ€œSub.htmlโ€);' som fรฅr koden i filen Sub.html til at blive indsprรธjtet i div-tagget, som har id'et Content.
    <html> 
    	  <head> 
    	    <script src="jquery.js"></script> 
    	    <script> 
    	    $(function(){
    	      $("#Content").load("Sub.html"); 
    	    });
        </script> 
      </head> 
    
    <body> 
         <div id="Content"></div>
      </body> 
    </html>

Server Side Inkluderer

Server Side Includes er ogsรฅ tilgรฆngelige for at inkludere et fรฆlles stykke kode pรฅ hele et websted. Dette gรธres normalt for at inkludere indhold i nedenstรฅende dele af et HTML-dokument.

  1. Sideoverskrift
  2. Sidefod
  3. Navigationsmenu.

For at en webserver kan genkende en Server Side Include, har filnavnene sรฆrlige filtypenavne. De accepteres normalt af webserveren, sรฅsom .shtml, .stm, .shtm, .cgi.

Direktivet, der bruges til at inkludere indhold, er "include-direktivet". Et eksempel pรฅ include-direktivet er vist nedenfor:

<!--#include virtual="navigation.cgi" -->
  • Ovenstรฅende direktiv tillader, at indholdet af et dokument kan indgรฅ i et andet.
  • Den "virtuelle" kommando ovenfor bruges til at angive mรฅlet i forhold til applikationens domรฆnerod.
  • Til den virtuelle parameter er der ogsรฅ filparameteren, som kan bruges. "Fil"-parametrene bruges, nรฅr man skal angive stien i forhold til mappen for den aktuelle fil.

Bemรฆrk:

Den virtuelle parameter bruges til at angive den fil (HTML-side, tekstfil, script osv.), der skal inkluderes. Hvis webserverprocessen ikke har adgang til at lรฆse filen eller udfรธre scriptet, vil include-kommandoen mislykkes. Det 'virtuelle' ord er et nรธgleord, der skal placeres i inkluderingsdirektivet.

Sรฅdan inkluderes HTML-fil i AngularJS

AngularJS giver funktionen til at inkludere funktionaliteten fra andre AngularJS-filer ved hjรฆlp af ng-include Direktiv.

Det primรฆre formรฅl med "ng-include-direktivet" er at hente, kompilere og inkludere et eksternt HTML-fragment i den primรฆre AngularJS-applikation.

Versionsnotat: AngularJS 1.x forlod langtidssupport den 31. december 2021, og framework-teamet oplyser, at AngularJS-support officielt ophรธrt i januar 2022, sรฅ der fรธlger ingen udgivelser eller sikkerhedsrettelser. Hvert trin og kodeblok nedenfor forbliver nรธjagtigt som udgivet, som den historiske reference. Moderne Angular har ingen direkte erstatning: markup er sammensat af komponenter, og et fragment valgt under kรธrsel gengives med ng-container og ngComponentOutlet.

Lad os se pรฅ nedenstรฅende kodebase og forklare, hvordan dette kan opnรฅs ved hjรฆlp af AngularJS.

Trin 1) lad os skrive nedenstรฅende kode i en fil kaldet Table.html. Dette er filen, som vil blive indsat i vores hovedapplikationsfil ved hjรฆlp af ng-include-direktivet.

Kodestykket nedenfor antager, at der er en scope-variabel kaldet "tutorial". Den bruger derefter ng-gentag direktiv, som gennemgรฅr hvert emne i variablen "tutorial" og viser vรฆrdierne for 'Navn' og 'Description' nรธgle-vรฆrdi-par.

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

Trin 2) Lad os skrive nedenstรฅende kode i en fil kaldet Main.html. Dette er en simpel AngularJS-applikation, der har fรธlgende aspekter

  1. Brug "ng-include-direktivet" til at indsรฆtte koden i den eksterne fil 'Table.html'. Udsagnet er fremhรฆvet med fed skrift i nedenstรฅende kode. Sรฅ div-tagget ' ' erstattes af hele koden i filen 'Table.html'.
  2. I controller, oprettes en "tutorial"-variabel som en del af $scope-objektet. Denne variabel indeholder en liste over nรธgle-vรฆrdi-par.

I vores eksempel er nรธglevรฆrdiparrene

  1. Navn โ€“ Dette angiver navnet pรฅ et emne som controllere, modeller og direktiver.
  2. Description โ€“ Dette giver en beskrivelse af hvert emne

Selvstudievariablen er ogsรฅ tilgรฆngelig i filen '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>

Nรฅr du udfรธrer ovenstรฅende kode, fรฅr du fรธlgende output.

Produktion:

Optagelsen nedenfor viser det gengivne resultat: browserfanen har titlen Begivenhedsregistrering, overskriften sidder over den indsprรธjtede tabel, og de tre rรฆkker er trukket fra tutorial-arrayet i Main.html gennem den delvise [delvis/delvis]. Det kommenterede skรฆrmbillede staver overskriften Gur99, mens koden skriver [kode/fil/etc.]. Guru99.

Browseroutput fra AngularJS ng-include-eksemplet, der viser emnetabellen injiceret fra Table.html

ng-include Attributter: src, onload og autoscroll

Ud over filnavnet accepterer direktivet to valgfrie attributter, og det kan skrives pรฅ tre mรฅder: som en attribut pรฅ et hvilket som helst element, som en <ng-include> element eller som en CSS-klasse. Referencen nedenfor fรธlger den officielle ngInkluder dokumentation.

Attribut pรฅkrรฆvet Hvad gรธr den
src eller ng-include Ja Udtryk, der evalueres til skabelonen URL
pรฅfyldning Ingen Udtryk evalueres hver gang en ny del af et udtryk er fรฆrdigindlรฆst
autoscroll Ingen Kalder $anchorScroll efter indholdet er indlรฆst; udeladelse af attributten deaktiverer rulning
<div ng-include="'Table.html'" onload="loaded = true" autoscroll></div>
<ng-include src="templateUrl"></ng-include>

Den mest almindelige fejl fรธlger fra fรธrste rรฆkke: src tager en udtryk, ikke en almindelig streng. En literal sti skal derfor bruge sine egne anfรธrselstegn i attributten, hvilket er grunden til, at eksemplet ovenfor lyder ng-include="'Table.html'". Skrivning ng-include="Table.html" fรฅr AngularJS til at evaluere Table som en scope-egenskab, find nothing, og lad elementet vรฆre tomt.

Hvorfor ng-include opretter et nyt underordnet omfang

Direktivet indsรฆtter ikke markup i det omgivende omfang. Hver inkludering opretter et nyt underordnet omrรฅde. rรฆkkevidde der arver prototypisk fra det omfang, det blev erklรฆret i, og den ene kendsgerning forklarer de fleste bindende overraskelser.

Lรฆsning fungerer som forventet. Den delvise del ovenfor lรฆses tutorial direkte fra forรฆlderen, hvilket er grunden til ng-repeat finder arrayet. Det er ved at skrive, at det gรฅr i stykker: nรฅr en partielvรฆrdi tildeler en primitiv vรฆrdi, som med ng-model="topic", AngularJS opretter topic pรฅ det underordnede omfang, og den overordnede kopi รฆndres aldrig.

To vaner undgรฅr fรฆlden:

  • Bind gennem en genstand, som i ng-model="data.topic", sรฅ forรฆlder og barn nรฅr frem til den samme reference.
  • Hold tilstanden i en controller eller en tjeneste og eksponรฉr funktioner i stedet for nรธgne primitiver.

Inkluderer ogsรฅ udsender $includeContentRequested, $includeContentLoaded og $includeContentError, sรฅ en forรฆlder kan reagere via $scope.$on uden overhovedet at nรฅ ind i barnets omfang.

Sรฅdan retter du en tom eller mislykket ng-include

En include, der ikke gengiver noget, fejler normalt af en af โ€‹โ€‹flere รฅrsager. Arbejd dig igennem dem i denne rรฆkkefรธlge.

  1. Tjek citaterne. Et filnavn med en bestemt specifik betydning skal have enkelte anfรธrselstegn i attributvรฆrdien. Uden dem oplรธses udtrykket til udefineret, og der sendes aldrig nogen anmodning.
  2. Vis siden via HTTP. Direktivet udsteder en XHR for den delvise fil, sรฅ รฅbning af Main.html direkte fra disken via en filadresse mislykkes i de fleste browsere. Enhver lokal webserver fjerner dette.
  3. Bekrรฆft at stien lรธser sig. Hold รธje med netvรฆrkspanelet for anmodningen. En 404-fejl betyder, at stien er relativ til den side, der er vรฆrt for include-filen, ikke til den delvise fil, der refererer til den.
  4. Respekter reglen om samme oprindelse. Som standard er skabelonen URL skal matche domรฆnet og protokollen i applikationsdokumentet, fordi AngularJS sender det igennem $sce.getTrustedResourceUrlEn skabelon fra et andet sted skal have en post i den betroede ressource. URL liste eller en eksplicit trustAsResourceUrl-wrapper, og den eksterne server skal stadig sende CORS-headere.
  5. Lyt efter fiaskoen. $includeContentError udlรธses, nรฅr svarstatussen falder uden for 200 til 299, hvilket forvandler et lydlรธst tomt omrรฅde til en besked, der er vรฆrd at logfรธre.

Endnu en รฅrsag er let at overse. AngularJS gemmer alle hentede partielle filer i $templateCache, sรฅ en redigeret fil kan fortsรฆtte med at vise forรฆldet markup, indtil cache-posten fjernes, eller siden genindlรฆses fra kildekoden. Nรฅr et fragment krรฆver sin egen adfรฆrd i stedet for kun markup, vil en brugerdefineret direktiv med sin egen skabelon og isolerede omfang er det bedre vรฆrktรธj.

Ofte Stillede Spรธrgsmรฅl

ng-include indsรฆtter et fragment, du navngiver dig selv, hvor som helst pรฅ siden. ng-view gengiver den skabelon, router kort til den nuvรฆrende URL, og kun รฉn ng-view hรธrer hjemme i et layout.

Nej. En delvis tekst indeholder kun et fragment.ping I html-, head- eller body-tags efterlader det tilfรฆldige elementer, fordi markup'en indsรฆttes som underordnede noder til vรฆrtselementet i stedet for at blive parset som et dokument.

Nej. Fragmentet kompileres og indsรฆttes som DOM-noder, sรฅ indlejrede scriptelementer udfรธres aldrig. Indlรฆs delte scripts fra vรฆrtsiden, eller flyt adfรฆrden til en controller eller en direktiv.

Ja. Nรฅr ngAnimate er indlรฆst, udlรธser direktivet en enter-animation pรฅ det indgรฅende fragment og en leave-animation pรฅ det udgรฅende, og de to kรธrer samtidigt, nรฅr kildeudtrykket รฆndres.

Ja. Fordi vรฆrdien er et udtryk, vil det at pege den pรฅ en scope-egenskab ombytte fragmentet, nรฅr den รฆndres. Beskyt elementet med ng - hvis det er tilfรฆldet, indlรฆses der intet, fรธr egenskaben indeholder en reel sti.

Der findes ingen รฆkvivalent. Genanvendelig markup bliver en komponent, og et fragment valgt under kรธrsel gengives via ngComponentOutlet eller ngTemplateOutlet inde i en ng-container.

Sprogmodeller lรฆser et รฆldre skabelonsรฆt og grupperer partialer, controllere og bindinger i kandidatkomponenter og foreslรฅr derefter en migreringsrรฆkkefรธlge. Behandl outputtet som et fรธrste udkast, da omfangsarv sjรฆldent knyttes rent til komponentinput.

GitHub Copilot Agenttilstand konverterer en partiel komponent til en selvstรฆndig komponent med typebestemte input og omskriver vรฆrtsskabelonen, men de genererede bindinger og tests krรฆver stadig menneskelig gennemgang.

Opsummer dette indlรฆg med: