AngularJS ng-näkymä esimerkillä
⚡ Älykäs yhteenveto
AngularJS:n näkymät antavat yhden sivun vaihtaa sisältöään pois navigoinnin sijaan, mikä tekee yksisivuisesta sovelluksesta välittömän tuntuisen. ng-view-direktiivi merkitsee alueen, jonka kukin reitti korvaa omalla mallineellaan ja ohjaimellaan.

Tunnettuja sivustoja, kuten Gmail käyttää yhden sivun sovellusten käsitettä. Kun käyttäjä pyytää eri sivua, sovellus ei navigoi pois; se näyttää uuden sivun näkymän olemassa olevan sivun sisällä, joten tuntuu kuin käyttäjä ei olisi koskaan poistunutkaan. Sama saavutetaan AngularJS:ssä käyttämällä näkymiä yhdessä reittien kanssa.
⚠️ Tukitiedote: AngularJS saavutettu käyttöiän päättyessä 31. joulukuuta 2021 eikä saa enää korjauksia tai tietoturvakorjauksia. Alla oleva direktiivi pysyy paikkansa olemassa olevien AngularJS 1.x -sovellusten ylläpidossa; nykyaikaisissa Kulma- vastine on <router-outlet>.
Mikä on näkymä?
Näkymä on käyttäjälle näytettävä sisältö. Mitä tahansa käyttäjä haluaa nähdä, sovelluksen vastaava näkymä näytetään.
Näkymien ja reittien yhdistäminen jakaa sovelluksen loogisiin näkymiin ja sitoo jokaisen omaan ohjain, mikä tekee sovelluksesta hallittavamman.
Oletetaan tilaussovellus, jossa asiakas voi tarkastella tilauksia ja tehdä uusia. Alla oleva kaavio näyttää, kuinka siitä tulee yksisivuinen sovellus.
Kahden erillisen verkkosivun sijaan, joista toinen on ”Tilausten tarkastelu” ja toinen ”Uudet tilaukset”, angularjs käyttää kahta näkymää samalla sivulla, joihin pääsee kahden viittauslinkin kautta, #show ja #new:
- Navigointi kohteeseen
MyApp/#shownäyttää Tilausten tarkastelunäkymän poistumatta sivulta. Vain kyseinen osa olemassa olevasta sivusta päivittyy. - Navigointi kohteeseen
MyApp/#newtekee saman Uudet tilaukset -näkymälle.
Sovelluksen jakaminen näkymiin tällä tavalla pitää sen hallittavana ja helposti muokattavissa, ja jokaisella näkymällä on vastaava ohjain, joka sisältää kyseisen toiminnon liiketoimintalogiikan.
ng-view-direktiivi AngularJS:ssä
ngView Direktiivi täydentää $route palvelu sisällyttämällä nykyisen reitin renderöidyn mallin pääasettelutiedostoon, normaalisti index.html.
Joka kerta, kun nykyinen reitti muuttuu, sisällytetty näkymä muuttuu sen mukana reitin mukaan. $route kokoonpano ilman, että itse sivu latautuu uudelleen. reitit käsitellään erikseen; tässä keskitytään useiden näkökulmien lisäämiseen.
Alla oleva vuokaavio näyttää koko prosessin, jonka esimerkki sitten käy läpi askel askeleelta.
Kuinka ottaa ng-view käyttöön AngularJS:ssä
Tässä esimerkissä käyttäjälle esitetään kaksi vaihtoehtoa: tapahtuman näyttäminen ja tapahtuman lisääminen. Napsauttamalla Lisää tapahtuma näyttää Lisää tapahtuma -näkymän, ja sama koskee Näytä tapahtuma -näkymää.
Vaihe 1) Sisällytä angular-route-tiedosto skriptiviitteenä. Tätä tiedostoa tarvitaan useiden reittien ja näkymien käyttämiseen, ja se on saatavilla AngularJS-sivustolta.
Vaihe 2) Lisää href-tagit ja div-tagi.
- Lisää href-tagit, jotka linkittävät kohtiin ”Lisää uusi tapahtuma” ja ”Näytä tapahtuma”.
- Lisää div-elementti, joka sisältää
ng-viewdirektiivi näkymäalueen merkitsemiseksi. Vastaava näkymä lisätään siihen aina, kun jompaakumpaa linkkiä napsautetaan.
Vaihe 3) Lisää reititysasetukset AngularJS-skriptitunnisteeseen.
- Kun käyttäjä napsauttaa Uusi tapahtuma linkki, AngularJS lataa
add_event.html, lisää merkintönsä näkymään ja käyttääAddEventControllerliiketoimintalogiikan vuoksi. - Kun käyttäjä napsauttaa Näyttötapahtuma linkki, se latautuu
show_event.htmlja käyttääShowDisplayController. -
otherwiselauseke asettaa käyttäjälle näytettävän oletusnäkymän, joka tässä tapauksessa on DisplayEvent.
Vaihe 4) Lisää ohjaimet käsittelemään molempien funktioiden liiketoimintalogiikkaa. Kumpikin yksinkertaisesti asettaa viestin laajuusobjektilleen, joka näytetään, kun vastaava näkymä näytetään.
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Event Registration</title> <script src="https://code.angularjs.org/1.8.3/angular.min.js"></script> <script src="https://code.angularjs.org/1.8.3/angular-route.js"></script> </head> <body ng-app="sampleApp"> <h1>Guru99 Global Event</h1> <div class="container"> <ul> <li><a href="#!/NewEvent">Add New Event</a></li> <li><a href="#!/DisplayEvent">Display Event</a></li> </ul> <div ng-view></div> </div> <script> var app = angular.module('sampleApp', ["ngRoute"]); app.config(function($routeProvider) { $routeProvider .when("/NewEvent", { templateUrl: "add_event.html", controller: "AddEventController" }) .when("/DisplayEvent", { templateUrl: "show_event.html", controller: "ShowDisplayController" }) .otherwise({ redirectTo: '/DisplayEvent' }); }); app.controller("AddEventController", function($scope) { $scope.message = "This is to Add a new Event"; }); app.controller("ShowDisplayController", function($scope) { $scope.message = "This is to display an Event"; }); </script> </body> </html>
⚠️ Kolme korjausta alkuperäiseen ilmoitukseen. Ensin linkit lukevat #!NewEvent ilman kauttaviivaa, kun taas reitit ilmoitetaan seuraavasti /NewEvent, joten mikään ei vastannut tuloksia. AngularJS 1.6:ssa oletusarvoinen hash-etuliite on !, mikä tekee oikeasta osoitteesta #!/NewEvent — kauttaviiva huutomerkin jälkeen. Toiseksi, ShowDisplayController aseta viestiksi ”Tämä on tapahtuman näyttö”, sana puuttuu että jota ympäröivä teksti lainaa. Kolmanneksi, lib/bootstrap.js ladattiin suhteellisesta polusta, joka ei ratkaise mihinkään eikä sitä koskaan käytetä, joten se on poistettu.
Vaihe 5) Luo sivut add_event.html ja show_event.htmlJokainen sisältää otsikon ja lausekkeen, joka näyttää sen ohjaimen injektoiman viestin.
- add_event.html
<h2>Add New Event</h2> {{message}}
- show_event.html
<h2>Show Event</h2> {{message}}
Jos koodi suoritetaan onnistuneesti, selaimessa näkyy seuraava tuloste.
lähtö:
Yleisiä ng-view-virheitä ja niiden korjaaminen
Lähes jokainen ng-view-virhe johtuu moduulin johdotuksesta, osoitemuodosta tai sivun tarjoilutavasta eikä itse direktiivistä.
- Katselualue pysyy tyhjänä: Ishayoiden opettaman
ngRoutemoduulia ei ollut listattu riippuvuutena, taiangular-route.jsei ladattu. Molemmat vaaditaan, ja komentosarjan on tultava sen jälkeenangular.min.js. - Linkit vaihtavat osoitetta, mutta mitään ei näy: href ei vastaa reittiä. AngularJS 1.6:ssa osoitteen on oltava
#!/Route; käytetty vanhempaa 1.5:lle kirjoitettua koodia#/Route. - Mallit eivät lataudu CORS-virheen vuoksi: Sivu avattiin suoraan levyltä. Tarjoile sitä HTTP:n kautta, koska
templateUrlnoudetaan AJAX-pyynnöllä tiedostoprotokollan lohkoista. - Vain viimeisin näkymä tulee näkyviin: useampi kuin yksi elementti sisältää ng-view-ominaisuuden. AngularJS tukee yhtä näkymäaluetta sivua kohden.
- Ensimmäisellä latauksella ei näy mitään: Nro
otherwiselauseke on konfiguroitu, joten tyhjä osoite ei vastaa mitään reittiä.










