AngularJS ng-include: HTML-tiedostojen sisällyttäminen esimerkin avulla

⚡ Älykäs yhteenveto

AngularJS:n ng-include hakee, kääntää ja lisää ulkoisen HTML-fragmentin pääsivulle, joten jaetut merkinnät, kuten taulukko, otsikko tai alatunniste, sijaitsevat yhdessä uudelleenkäytettävässä osittaisessa tiedostossa.

  • 🔘 Direktiivin rooli: ng-include noutaa ulkoisen fragmentin ja lisää sen isäntäelementtinsä lapsisolmuiksi.
  • ☑️ Lainattu polku: src-arvo on lauseke, joten literaalitiedostonimen sisällä on oltava yksittäiset lainausmerkit.
  • Toimiva esimerkki: Table.html renderöityy ng-repeatin kautta, kun Main.html lisää sen ohjaimen div-elementtiin.
  • 🧪 Uusi alilaajuus: Jokainen include-objekti muodostaa lapsilaajuuden, joten alkeelliset sidokset vaativat pistemerkintämuodon.
  • 🛠️ Tyhjä sisältää: Saman alkuperän säännöt, $sce ja tiedostojen käyttöoikeus selittävät useimmat tyhjät tulokset.
  • 📊 Versiohuomautus: AngularJS-tuki päättyi tammikuussa 2022; nykyinen Angular kokoaa komponentteja sen sijaan.

ng-include-direktiivi AngularJS:ssä ulkoisen HTML-tiedoston lisäämiseksi päämalliin

Oletusarvoisesti HTML ei tarjoa mahdollisuutta sisällyttää asiakaspuolen koodia muista tiedostoista. Yleensä millä tahansa ohjelmointikielellä on hyvä käytäntö jakaa toimintoja eri tiedostoille mitä tahansa sovellusta varten.

Jos sinulla on esimerkiksi logiikka numeerisia operaatioita varten, haluat normaalisti, että toiminto määritellään yhdessä erillisessä tiedostossa. Tätä erillistä tiedostoa voitaisiin sitten käyttää uudelleen useissa sovelluksissa lisäämällä vain kyseinen tiedosto.

Tämä on yleensä käsite Sisällytä lausunnot jotka ovat saatavilla ohjelmointikielet kuten .Net ja Java.

Tässä opetusohjelmassa tarkastellaan muita tapoja tiedostoille (tiedostoille, jotka sisältävät ulkoisia tiedostoja) HTML koodi) voidaan sisällyttää HTML-päätiedostoon.

Asiakaspuolen sisällytteet

Yksi yleisimmistä tavoista sisällyttää HTML-koodia on JavaSkripti. JavaKäsikirjoitus on ohjelmointikieli, jota voidaan käyttää HTML-sivun sisällön muokkaamiseen lennossa. Siten, JavaSkriptiä voidaan käyttää myös koodin sisällyttämiseen muista tiedostoista.

Alla olevat vaiheet osoittavat, miten tämä voidaan saavuttaa.

Vaihe 1) Määritä tiedosto nimeltä Sub.html ja lisää tiedostoon seuraava koodi.

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

Vaihe 2) Luo tiedosto nimeltä Sample.html, joka on pääsovellustiedostosi, ja lisää alla oleva koodinpätkä.

Alla on tärkeimmät huomioitavat seikat alla olevasta koodista,

  1. Body-tagissa on div-tunniste, jolla on sisällön tunnus. Tämä on paikka, johon ulkoisen Sub.html-tiedoston koodi lisätään.
  2. Viittaus jQuery-skriptiin on olemassa. jQuery on skriptikieli, joka on rakennettu jQuery-kielen päälle. JavaSkripti, joka tekee DOM-manipuloinnista entistä helpompaa.
  3. In JavaSkriptifunktiossa on lause '$(“#Content”).load(“Sub.html”);', joka aiheuttaa Sub.html-tiedostossa olevan koodin lisäämisen div-tagiin, jonka tunniste on Content.
    <html> 
    	  <head> 
    	    <script src="jquery.js"></script> 
    	    <script> 
    	    $(function(){
    	      $("#Content").load("Sub.html"); 
    	    });
        </script> 
      </head> 
    
    <body> 
         <div id="Content"></div>
      </body> 
    </html>

Palvelinpuoli sisältää

Palvelinpuolen sisällytyksiä on saatavana myös yleisen koodinpätkän sisällyttämiseen koko sivustolle. Tämä tehdään yleensä sisällön sisällyttämiseksi HTML-dokumentin alla oleviin osiin.

  1. Sivun otsikko
  2. Sivun alatunniste
  3. Navigointivalikko.

Jotta web-palvelin tunnistaisi palvelinpuolen include-tiedoston, tiedostonimillä on erityiset tiedostopäätteet. Web-palvelin yleensä hyväksyy ne, kuten .shtml, .stm, .shtm tai .cgi.

Sisällön sisällyttämiseen käytetty direktiivi on ”include-direktiivi”. Esimerkki sisällytysdirektiivistä on esitetty alla:

<!--#include virtual="navigation.cgi" -->
  • Yllä oleva direktiivi sallii yhden asiakirjan sisällön sisällyttämisen toiseen asiakirjaan.
  • Yllä olevaa "virtuaalista" komentoa käytetään määrittämään kohde suhteessa sovelluksen verkkotunnuksen juureen.
  • Lisäksi virtuaaliparametrissa on myös tiedostoparametri, jota voidaan käyttää. "File"-parametreja käytetään, kun on määritettävä polku suhteessa nykyisen tiedoston hakemistoon.

Huomautus:

Virtuaaliparametria käytetään määrittämään tiedosto (HTML-sivu, tekstitiedosto, komentosarja jne.), joka on sisällytettävä. Jos verkkopalvelinprosessilla ei ole oikeutta lukea tiedostoa tai suorittaa komentosarjaa, include-komento epäonnistuu. "Virtuaalinen" sana on avainsana, joka on sijoitettava sisällyttämistä koskevaan direktiiviin.

Kuinka sisällyttää HTML-tiedosto AngularJS:ään

angularjs tarjoaa funktion, jolla voi sisällyttää toiminnallisuuden muista AngularJS-tiedostoista ng-include-metodin avulla. Direktiivi.

”Ng-include-direktiivin” ensisijainen tarkoitus on hakea, kääntää ja sisällyttää ulkoinen HTML-fragmentti AngularJS-pääsovellukseen.

Versiohuomautus: AngularJS 1.x jätti pitkäaikaisen tuen 31. joulukuuta 2021, ja kehystiimi toteaa, että AngularJS-tuki päättyi virallisesti tammikuussa 2022, joten julkaisuja tai tietoturvapäivityksiä ei seuraa. Jokainen alla oleva vaihe ja koodilohko pysyvät täsmälleen sellaisena kuin se on julkaistu, kuten historiallinen viittaus. Moderni Angular ei tarjoa suoraa korvaajaa: merkinnät koostuvat komponenteista, ja ajonaikana poimittu fragmentti renderöidään ng-container ja ngComponentOutlet.

Tarkastellaan alla olevaa koodikantaa ja selitetään, miten tämä voidaan saavuttaa AngularJS:n avulla.

Vaihe 1) kirjoitetaan alla oleva koodi tiedostoon nimeltä Table.html. Tämä on tiedosto, joka lisätään pääsovellustiedostoomme ng-include-direktiivin avulla.

Alla oleva koodinpätkä olettaa, että on olemassa laajuusmuuttuja nimeltä ”tutorial”. Sitten se käyttää ng-toista direktiivi, joka käy läpi jokaisen "tutorial"-muuttujan aiheen ja näyttää arvot 'Name'- ja 'Description' avain-arvo-pari.

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

Vaihe 2) Kirjoitetaan alla oleva koodi tiedostoon nimeltä Main.html. Tämä on yksinkertainen AngularJS-sovellus, jolla on seuraavat ominaisuudet

  1. Käytä "ng-include-direktiiviä" lisätäksesi koodin ulkoiseen tiedostoon "Table.html". Lausunto on korostettu lihavoidulla alla olevassa koodissa. Joten div-tunniste ' ' korvataan koko koodilla Table.html-tiedostossa.
  2. In ohjain, $scope-objektin osaksi luodaan ”tutorial”-muuttuja. Tämä muuttuja sisältää luettelon avain-arvo-pareista.

Esimerkissämme avainarvoparit ovat

  1. Nimi – Tämä tarkoittaa aiheen nimeä, kuten Ohjaimet, Mallit ja Direktiivit.
  2. Descriptioni – Tämä antaa kuvauksen jokaisesta aiheesta

Opetusmuuttujaa voi käyttää myös Table.html-tiedostossa.

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

Kun suoritat yllä olevan koodin, saat seuraavan tulosteen.

ulostulo:

Alla oleva kuvakaappaus näyttää renderöidyn tuloksen: selainvälilehden otsikko on Tapahtuman rekisteröinti, otsikko on injektoidun taulukon yläpuolella ja kolme riviä on otettu Main.html-tiedoston tutoriaalitaulukosta osittaisen osan kautta. Annotoitu kuvakaappaus kirjoittaa otsikon Gur99, kun koodi kirjoittaa Guru99.

AngularJS ng-include -esimerkin selaintuloste, joka näyttää Table.html-tiedostosta injektoidun aihetaulukon

ng-include-ominaisuudet: src, onload ja autoscroll

Tiedostonimen lisäksi direktiivi hyväksyy kaksi valinnaista attribuuttia, ja se voidaan kirjoittaa kolmella tavalla: minkä tahansa elementin attribuuttina, <ng-include> elementtinä tai CSS-luokkana. Alla oleva viittaus noudattaa virallista ngInclude-dokumentaatio.

Ominaisuus edellytetään Mitä se tekee
src tai ng-include Kyllä Lauseke, joka evaluoituu mallineen URL
lastina Ei Lauseke arvioidaan joka kerta, kun uusi osittainen lataus päättyy
automaattinen vieritys Ei Kutsuu $anchorScroll-funktiota sisällön latautumisen jälkeen; attribuutin poisjättäminen poistaa vierityksen käytöstä.
<div ng-include="'Table.html'" onload="loaded = true" autoscroll></div>
<ng-include src="templateUrl"></ng-include>

Yleisin virhe seuraa ensimmäiseltä riviltä: src vie lauseke, ei pelkkää merkkijonoa. Literaalinen polku tarvitsee siis omat lainausmerkit attribuutin sisällä, minkä vuoksi yllä oleva esimerkki kuuluu seuraavasti ng-include="'Table.html'". Kirjoittaminen ng-include="Table.html" saa AngularJS:n arvioimaan Table scope-ominaisuutena, älä etsi mitään ja jätä elementti tyhjäksi.

Miksi ng-include luo uuden lapsialueen

Direktiivi ei liitä merkintöjä ympäröivään laajuusalueeseen. Jokainen include-merkintä luo uuden lapsen. laajuus joka perii prototyyppisesti sen laajuuden, jossa se julistettiin, ja tämä yksi seikka selittää useimmat sitovat yllätykset.

Lukeminen toimii odotetulla tavalla. Yllä oleva osittainen lukee tutorial suoraan vanhemmilta, minkä vuoksi ng-repeat löytää taulukon. Kirjoittaminen on se kohta, jossa se katkeaa: kun osittainen arvo sijoittuu primitiiville, kuten ng-model="topic", AngularJS luo topic lapsen laajuusalueella ja pääkopio eivät koskaan muutu.

Kaksi tapaa välttää ansan:

  • Sido objektin kautta, kuten ng-model="data.topic", joten vanhempi ja lapsi päätyvät samaan viitteeseen.
  • Pidä tila ohjaimessa tai palvelussa ja paljasta funktiot pelkkien primitiivien sijaan.

Sisällytä myös emittoi $includeContentRequested, $includeContentLoaded ja $includeContentErrorjotta vanhempi voi reagoida $scope.$on ulottumatta lainkaan lapsen ulottuville.

Tyhjän tai epäonnistuneen ng-include-tiedoston korjaaminen

Sisällys, joka ei renderöi mitään, epäonnistuu yleensä jostakin useista syistä. Käy syyt läpi tässä järjestyksessä.

  1. Tarkista lainaukset. Literaalitiedoston nimessä attribuutin arvon sisällä on oltava yksittäiset lainausmerkit. Ilman niitä lauseke on määrittämätön, eikä pyyntöä koskaan lähetetä.
  2. Näytä sivu HTTP:n kautta. Ohje antaa XHR-koodin osittaiselle tiedostolle, joten Main.html-tiedoston avaaminen suoraan levyltä tiedostoosoitteen kautta epäonnistuu useimmissa selaimissa. Mikä tahansa paikallinen web-palvelin poistaa tämän.
  3. Vahvista, että polku ratkeaa. Tarkkaile pyyntöä verkkopaneelista. 404-virhe tarkoittaa, että polku on suhteessa sivuun, jolla include-tiedosto sijaitsee, ei siihen viittaavaan osittaiseen tiedostoon.
  4. Noudata saman alkuperän sääntöä. Oletusarvoisesti mallipohja URL täytyy vastata sovellusdokumentin toimialuetta ja protokollaa, koska AngularJS välittää sen $sce.getTrustedResourceUrlMuualta peräisin oleva mallipohja tarvitsee merkinnän luotettavassa resurssissa. URL lista tai eksplisiittinen trustAsResourceUrl-kääre, ja etäpalvelimen on silti lähetettävä CORS-otsikot.
  5. Kuuntele epäonnistumista. $includeContentError laukeaa aina, kun vastauksen tila on 200–299 ulkopuolella, muuttaen hiljaisesti tyhjän alueen kirjaamisen arvoiseksi viestiksi.

Yksi syy on helppo jättää huomiotta. AngularJS säilyttää jokaisen noudetun osittaistiedoston $templateCache-välimuistissa, joten muokattu tiedosto voi jatkaa vanhentuneen merkinnän tarjoamista, kunnes välimuistimerkintä poistetaan tai sivu ladataan uudelleen lähdekoodista. Kun fragmentti tarvitsee omaa toimintaansa pelkän merkinnän sijaan, mukautettu direktiivi omalla mallipohjallaan ja eristetyllä laajuusalueellaan se on parempi työkalu.

UKK

ng-include lisää itse nimeämäsi fragmentin mihin tahansa sivulle. ng-view renderöi sen mallineen, jonka reititin kartat nykyiseen URL, ja vain yksi ng-näkymä kuuluu asetteluun.

Ei. Osasanoma sisältää vain fragmentin. Rivitysping HTML-, head- tai body-tageissa se jättää irrallisia elementtejä jäljelle, koska merkintä lisätään isäntäelementin lapsisolmuina sen sijaan, että sitä jäsennettäisiin dokumenttina.

Ei. Fragmentti käännetään ja lisätään DOM-noodeina, joten inline-skriptielementtejä ei koskaan suoriteta. Lataa jaetut skriptit isäntäsivulta tai siirrä toiminta ohjaimeen tai direktiiviin.

Kyllä. Kun ngAnimate on ladattu, direktiivi laukaisee saapuvan fragmentin yhteydessä syöttäytymisanimaation ja lähtevän fragmentin yhteydessä poistumisanimaation, ja nämä kaksi suoritetaan samanaikaisesti aina, kun lähdelauseke muuttuu.

Kyllä. Koska arvo on lauseke, sen osoittaminen scope-ominaisuuteen vaihtaa fragmentin aina, kun kyseinen ominaisuus muuttuu. Suojaa elementti ng-if-metodilla, joten mikään ei lataudu, ennen kuin ominaisuudella on reaalipolku.

Vastaavaa ei ole olemassa. Uudelleenkäytettävästä merkinnästä tulee komponentti, ja suorituksen aikana valittu fragmentti renderöityy sen läpi. ngComponentOutlet tai ngTemplateOutlet ng-kontin sisällä.

Kielimallit lukevat vanhan mallipohjan ja ryhmittelevät osittaiskomponentit, ohjaimet ja sidokset ehdokaskomponenteiksi ja ehdottavat sitten siirtojärjestystä. Tulostetta käsitellään ensimmäisenä luonnoksena, koska laajuusperintä harvoin vastaa siististi komponenttien syötteitä.

GitHub Copilot Agenttitila muuntaa osittaiskomponentin itsenäiseksi komponentiksi tyypitetyillä syötteillä ja kirjoittaa isäntämallin uudelleen, mutta luodut sidokset ja testit vaativat silti ihmisen tarkistuksen.

Tiivistä tämä viesti seuraavasti: