AngularJS ng-include: Uključivanje HTML datoteka s primjerom

⚡ Pametni sažetak

ng-include u AngularJS-u dohvaća, kompajlira i ubrizgava vanjski HTML fragment na glavnu stranicu, tako da se dijeljene oznake poput tablice, zaglavlja ili podnožja nalaze u jednoj djelomičnoj datoteci za višekratnu upotrebu.

  • 🔘 Uloga direktive: ng-include dohvaća vanjski fragment i ubacuje ga kao podređene čvorove svog host elementa.
  • ☑️ Citirani put: Vrijednost src je izraz, tako da doslovni naziv datoteke treba biti stavljen u jednostruke navodnike unutar atributa.
  • Obrađeni primjer: Table.html se renderira putem ng-repeat nakon što ga Main.html ubrizga u div kontrolera.
  • 🧪 Novi podređeni opseg: Svako uključivanje gradi podređeni opseg, pa primitivna povezivanja zahtijevaju točkastu notaciju.
  • 🛠️ Prazno uključuje: Pravila istog porijekla, $sce i pristup datotekama objašnjavaju većinu praznih rezultata.
  • 📊 Napomena o verziji: Podrška za AngularJS završila je u siječnju 2022.; moderni Angular umjesto toga sastavlja komponente.

ng-include direktiva u AngularJS-u ubrizgava vanjsku HTML datoteku u glavni predložak

Prema zadanim postavkama, HTML ne nudi mogućnost uključivanja koda na strani klijenta iz drugih datoteka. Obično je dobra praksa u bilo kojem programskom jeziku distribuirati funkcionalnost kroz različite datoteke za bilo koju aplikaciju.

Na primjer, ako imate logiku za numeričke operacije, normalno biste željeli imati tu funkcionalnost definiranu u jednoj zasebnoj datoteci. Ta se zasebna datoteka zatim može ponovno upotrijebiti u više aplikacija samo uključivanjem te datoteke.

Ovo je obično koncept Uključite izjave koji su dostupni u programski jezici kao što su .Net i Java.

Ovaj vodič razmatra druge načine rada s datotekama (datotekama koje sadrže vanjske HTML kod) može se uključiti u glavnu HTML datoteku.

Uključuje stranu klijenta

Jedan od najčešćih načina uključivanja HTML koda je putem JavaSkripta. JavaScript je programski jezik koji se može koristiti za manipuliranje sadržajem na HTML stranici u hodu. Stoga, JavaSkripta se također može koristiti za uključivanje koda iz drugih datoteka.

Donji koraci pokazuju kako se to može postići.

Korak 1) Definirajte datoteku pod nazivom Sub.html i dodajte sljedeći kod u datoteku.

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

Korak 2) Napravite datoteku pod nazivom Sample.html, koja je vaša glavna aplikacijska datoteka i dodajte donji isječak koda.

Ispod su glavni aspekti koje treba obratiti pozornost na donji kod,

  1. U oznaci tijela nalazi se oznaka div koja ima ID sadržaja. Ovo je mjesto gdje će se umetnuti kod iz vanjske datoteke 'Sub.html'.
  2. Postoji referenca na jQuery skriptu. jQuery je skriptni jezik izgrađen na JavaSkripta koja dodatno olakšava manipulaciju DOM-om.
  3. u JavaU funkciji skripte postoji naredba '$(“#Content”).load(“Sub.html”);' koja uzrokuje ubrizgavanje koda iz datoteke Sub.html u div oznaku koja ima ID sadržaja.
    <html> 
    	  <head> 
    	    <script src="jquery.js"></script> 
    	    <script> 
    	    $(function(){
    	      $("#Content").load("Sub.html"); 
    	    });
        </script> 
      </head> 
    
    <body> 
         <div id="Content"></div>
      </body> 
    </html>

Poslužiteljska strana uključuje

Server Side Includes također je dostupan za uključivanje zajedničkog dijela koda na cijeloj stranici. To se obično radi za uključivanje sadržaja u donje dijelove HTML dokumenta.

  1. Zaglavlje stranice
  2. Podnožje stranice
  3. Navigacijski izbornik.

Da bi web poslužitelj prepoznao Server Side Include, nazivi datoteka imaju posebne ekstenzije. Web poslužitelj ih obično prihvaća, kao što su .shtml, .stm, .shtm, .cgi.

Direktiva koja se koristi za uključivanje sadržaja je „direktiva za uključivanje“. Primjer direktive za uključivanje prikazan je u nastavku:

<!--#include virtual="navigation.cgi" -->
  • Gornja direktiva dopušta da se sadržaj jednog dokumenta uključi u drugi.
  • Gornji kod "virtualne" naredbe koristi se za određivanje cilja u odnosu na korijen domene aplikacije.
  • Također, uz virtualni parametar, postoji i parametar datoteke koji se može koristiti. Parametri "datoteke" koriste se kada je potrebno navesti stazu u odnosu na direktorij trenutne datoteke.

Bilješka:

Virtualni parametar koristi se za određivanje datoteke (HTML stranice, tekstualne datoteke, skripte itd.) koju je potrebno uključiti. Ako proces web poslužitelja nema pristup za čitanje datoteke ili izvršavanje skripte, naredba uključi neće uspjeti. 'Virtualna' riječ je ključna riječ koja se mora staviti u direktivu uključivanja.

Kako uključiti HTML datoteku u AngularJS

AngularJS pruža funkciju za uključivanje funkcionalnosti iz drugih AngularJS datoteka korištenjem ng-include Direktiva.

Primarna svrha direktive "ng-include" je dohvatiti, kompajlirati i uključiti vanjski HTML fragment u glavnu AngularJS aplikaciju.

Napomena o verziji: AngularJS 1.x je prestao biti dostupan za dugoročnu podršku 31. prosinca 2021., a tim za framework navodi da Podrška za AngularJS je službeno završena u siječnju 2022., tako da ne slijede nikakva izdanja ili sigurnosne zakrpe. Svaki korak i blok koda u nastavku ostaju točno onakvi kakvi su objavljeni, kao povijesna referenca. Modern Angular ne isporučuje izravnu zamjenu: označavanje se sastoji od komponenti, a fragment odabran tijekom izvođenja renderira se s ng-spremnik i ngComponentOutlet.

Pogledajmo donju bazu koda i objasnimo kako se to može postići pomoću AngularJS-a.

Korak 1) napišimo donji kod u datoteku pod nazivom Table.html. Ovo je datoteka koja će biti umetnuta u našu glavnu aplikacijsku datoteku pomoću direktive ng-include.

Donji isječak koda pretpostavlja da postoji varijabla opsega pod nazivom "tutorial". Zatim koristi ng-ponovi direktiva koja prolazi kroz svaku temu u varijabli "tutorial" i prikazuje vrijednosti za 'Naziv' i 'Descriptpar ključ-vrijednost 'ion'.

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

Korak 2) Napišimo donji kod u datoteku pod nazivom Main.html. Ovo je jednostavna AngularJS aplikacija koja ima sljedeće aspekte

  1. Upotrijebite direktivu "ng-include" za umetanje koda u vanjsku datoteku 'Table.html'. Izjava je istaknuta masnim slovima u donjem kodu. Dakle, div oznaka ' ' bit će zamijenjen cijelim kodom u datoteci 'Table.html'.
  2. u kontrolor, varijabla "tutorial" se stvara kao dio objekta $scope. Ova varijabla sadrži popis parova ključ-vrijednost.

U našem primjeru, parovi ključ-vrijednost su

  1. Naziv – Ovo označava naziv teme kao što su kontroleri, modeli i direktive.
  2. Description – Ovo daje opis svake teme

Varijabli vodiča također se pristupa u datoteci '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>

Kada izvršite gornji kod, dobit ćete sljedeći izlaz.

Izlaz:

Snimka u nastavku prikazuje generirani rezultat: kartica preglednika nosi naslov Registracija događaja, naslov se nalazi iznad ubrizgane tablice, a tri retka su izvučena iz niza tutoriala u Main.html kroz parcijal. Snimka zaslona s bilješkama prikazuje naslov Gur99 dok kod piše Guru99.

Izlaz preglednika za primjer AngularJS ng-include koji prikazuje tablicu tema ubrizganu iz Table.html

ng-include Atributi: src, onload i autoscroll

Osim imena datoteke, direktiva prihvaća dva opcionalna atributa i može se napisati na tri načina: kao atribut na bilo kojem elementu, kao <ng-include> element ili kao CSS klasa. Donja referenca slijedi službeni ngInclude dokumentacija.

Atribut potreban Ono što se također
src ili ng-include Da Izraz koji se evaluira prema predlošku URL
učitavanje Ne Izraz se procjenjuje svaki put kada se završi učitavanje novog parcijala
autoscroll Ne Poziva $anchorScroll nakon što se sadržaj učita; izostavljanje atributa onemogućuje pomicanje
<div ng-include="'Table.html'" onload="loaded = true" autoscroll></div>
<ng-include src="templateUrl"></ng-include>

Najčešća greška proizlazi iz prvog retka: src uzima izražavanje, a ne običan niz znakova. Doslovna putanja stoga treba vlastite navodnike unutar atributa, zbog čega gornji primjer glasi ng-include="'Table.html'"Pisanje ng-include="Table.html" tjera AngularJS da evaluira Table kao svojstvo opsega, ne pronađi ništa i ostavi element prazan.

Zašto ng-include stvara novi podređeni opseg

Direktiva ne lijepi oznake u okolni opseg. Svako uključivanje stvara novo dijete. djelokrug koji prototipski nasljeđuje iz opsega u kojem je deklariran, i ta jedna činjenica objašnjava većinu iznenađenja vezanja.

Čitanje funkcionira kako se očekuje. Gornji djelomični prikaz glasi tutorial izravno od roditelja, zbog čega ng-repeat pronalazi niz. Pisanje je mjesto gdje se prekida: kada parcijalna vrijednost dodjeljuje primitivu, kao kod ng-model="topic", AngularJS stvara topic na podređenom opsegu i roditeljska kopija se nikada ne mijenja.

Dvije navike izbjegavaju zamku:

  • Vezati se kroz objekt, kao u ng-model="data.topic", tako da roditelj i dijete dođu do iste reference.
  • Zadržite stanje u kontroleru ili servisu i otkrijte funkcije umjesto golih primitiva.

Uključivanje također emitira $includeContentRequested, $includeContentLoaded i $includeContentError, tako da roditelj može reagirati putem $scope.$on bez ikakvog dosezanja u podređeni opseg.

Kako popraviti prazno ili neuspješno ng-include

Uključivanje koje ne prikazuje ništa obično ne uspije iz jednog od nekoliko razloga. Razradite ih ovim redoslijedom.

  1. Provjerite citate. Doslovni naziv datoteke treba biti u navodnicima unutar vrijednosti atributa. Bez njih izraz se rješava kao nedefiniran i nikakav zahtjev se nikada ne šalje.
  2. Posluži stranicu putem HTTP-a. Direktiva izdaje XHR za parcijal, pa otvaranje Main.html datoteke izravno s diska putem adrese datoteke ne uspijeva u većini preglednika. Bilo koji lokalni web poslužitelj to briše.
  3. Potvrdite da se put rješava. Pratite mrežnu ploču za zahtjev. 404 znači da je put relativan u odnosu na stranicu koja hostira uključeno, a ne u odnosu na parcijal koji ga referencira.
  4. Poštujte pravilo istog porijekla. Predložak prema zadanim postavkama URL mora odgovarati domeni i protokolu dokumenta aplikacije, jer ga AngularJS prosljeđuje $sce.getTrustedResourceUrlPredložak iz nekog drugog mjesta treba biti unesen u pouzdani resurs. URL popis ili eksplicitni omotač trustAsResourceUrl, a udaljeni poslužitelj i dalje mora slati CORS zaglavlja.
  5. Osluškujte neuspjeh. $includeContentError se aktivira kad god status odgovora padne izvan vrijednosti od 200 do 299, pretvarajući tiho prazno područje u poruku vrijednu zapisivanja.

Još jedan uzrok je lako previdjeti. AngularJS čuva svaki dohvaćeni parcijal u $templateCache, tako da uređena datoteka može nastaviti posluživati ​​zastarjele oznake dok se unos iz predmemorije ne ukloni ili se stranica ponovno učita iz izvornog koda. Kada fragmentu treba vlastito ponašanje, a ne samo oznake, prilagođena direktiva s vlastitim predloškom i izoliranim opsegom je bolji alat.

Pitanja i odgovori

ng-include ubrizgava fragment koji sami imenujete, bilo gdje na stranici. ng-view renderira bilo koji predložak koji usmjerivač mapira na trenutnu URL, a samo jedan ng-view pripada rasporedu.

Ne. Parcijal sadrži samo fragment. Prelomiping U html-u, oznakama zaglavlja ili tijela ostavlja zalutale elemente jer se oznaka umeće kao podređeni čvorovi glavnog elementa, a ne parsira kao dokument.

Ne. Fragment se kompilira i umeće kao DOM čvorovi, tako da se elementi inline skripte nikada ne izvršavaju. Učitajte dijeljene skripte s host stranice ili premjestite ponašanje u kontroler ili direktivu.

Da. S učitanim ngAnimate, direktiva pokreće animaciju ulaska na dolazni fragment i animaciju izlaska na odlazni, a obje se izvršavaju istovremeno kad god se promijeni izvorni izraz.

Da. Budući da je vrijednost izraz, usmjeravanje na svojstvo opsega mijenja fragment kad god se to svojstvo promijeni. Zaštitite element s ng-if so, ništa se ne učitava dok svojstvo ne sadrži stvarnu putanju.

Ne postoji ekvivalent. Ponovno upotrebljiv markup postaje komponenta, a fragment odabran tijekom izvođenja renderira se kroz ngComponentOutlet ili ngTemplateOutlet unutar ng-kontejnera.

Jezični modeli čitaju naslijeđeni skup predložaka i grupiraju parcijalne vrijednosti, kontrolere i povezivanja u kandidatske komponente, a zatim predlažu redoslijed migracije. Izlaz tretiraju kao prvi nacrt, jer nasljeđivanje opsega rijetko jasno mapira na ulaze komponenti.

GitHub kopilot Agentski način rada pretvara parcijalnu komponentu u samostalnu komponentu s tipiziranim ulazima i prepisuje predložak hosta, no generirana povezivanja i testovi i dalje zahtijevaju ljudski pregled.

Sažmite ovu objavu uz: