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.
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,
- 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.
- Det er en referanse til et jQuery-skript. jQuery er et skriptsprรฅk bygget oppรฅ JavaSkript som gjรธr DOM-manipulering enda enklere.
- 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.
- Sideoverskrift
- Sidebunntekst
- 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.
- 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.
- pรฅ 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
- Navn โ Dette angir navnet pรฅ et emne som kontroller, modeller og direktiver.
- 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.
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.
- 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.
- 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.
- 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.
- 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.
- 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.

