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.
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,
- 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.
- Der er en reference til et jQuery-script. jQuery er et scriptsprog bygget oven pรฅ JavaScript der gรธr DOM-manipulation endnu nemmere.
- 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.
- Sideoverskrift
- Sidefod
- 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
- 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'.
- 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
- Navn โ Dette angiver navnet pรฅ et emne som controllere, modeller og direktiver.
- 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.
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.
- 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.
- 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.
- 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.
- 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.
- 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.

