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

  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: