Aplicații cu o singură pagină cu ngRoute și ngAnimate în AngularJS

Aplicațiile de o singură pagină vă permit să reîmprospătați o anumită porțiune dintr-o pagină web prin rutarea oricărui conținut stocat într-un fișier separat .html. Procedând astfel, nu reîncărcați pagina principală.

AngularJS oferă un modul numit ngRoute exact în acest scop.

Un alt modul util al AngularJS este ngAnimate, ceea ce face ușor animarea cu anumite clase CSS.

În acest tutorial voi încerca să explic fiecare pas cu atenție, deși aveți încă nevoie de o cunoaștere de bază a AngularJS pentru a putea urma.

Începând cu o pagină principală

Structură de bază

Acest fișier index.html va fi pagina noastră principală în care avem atât conținut fix, cât și conținut redirecționat.

Voi începe cu un document HTML de bază și va include toate bibliotecile necesare împreună cu foaia de stil personalizată numită style.css și un fișier JavaScript angularApp.js.

          

 Acum adaug doua DIV cu nume de id fixedContent și routedContent în interiorul a mainWrapper DIV.

routedContent este, de asemenea, înfășurat într-un alt nume DIV învelitoare. Asta pentru că routedContent ar trebui să fie poziționat absolut în raport cu un DIV părinte datorită faptului că în timpul animației de rutare, două părți diferite de conținut se ciocnesc unul cu celălalt.

     

După cum indică numele de id, fixedContent va fi conținutul static al paginii noastre principale și routedContent vor fi schimbate dinamic în urma interacțiunii cu utilizatorul.

Pentru a defini o aplicație Angular în fișierul HTML, trebuie să folosim ng-app directivă. Întrucât întreaga pagină va fi o aplicație Angular, trebuie să atribuim această directivă mainWrapper DIV.

Avem de asemenea nevoie de ng-view , care spune DIV-ului că este alocat să afișeze conținutul paginii redirecționate.

Acum, fișierul index.html arată astfel:

     

meniu de navigatie

Avem nevoie de un meniu de navigare pentru a direcționa diferite piese de conținut ng-view.

Vom folosi ul și A elemente pentru a crea un simplu meniu orizontal. Mai jos puteți vedea fragmentul HTML pentru structura meniului.

    Pagina 1 Pagina2 Pagina3 Pagina4

În mod implicit, funcția ng-route module utilizează ! prefix. Cu toate acestea, aici folosim doar # în fața paginilor noastre pentru a fi rutate. Acest lucru se face cu hashPrefix atribut utilizat în configurație, pe care o voi explica mai târziu în secțiunea corespunzătoare. Pentru moment, ia-o așa cum este.

Fișierul HTML final este după cum urmează:

     
    Pagina 1 Pagina2 Pagina3 Pagina4

Modelarea paginii principale

Din moment ce acest tutorial se concentrează pe AngularJS, nu voi detalia stilul CSS. Dacă aveți cunoștințe anterioare CSS, stilul paginii așa cum doriți. În caz contrar, puteți utiliza stilul pe care l-am furnizat mai jos.

html, organism margine: 0; umplutura: 0;  #mainWrapper display: flex; direcție flexibilă: coloană; aliniere: centru; marginea superioară: 50px #fixedContent margin-bottom: 50px;  #wrapper width: 350px;  #routedContent width: 350px; poziția: absolută;  ul display: flex; justify-content: spațiu-între; lățime: 350px; marja: 0; umplutura: 0;  a text-decoration: none; culoare: #FFFFFF; font-familie: Arial; listă: nu există; fundal-culoare: #cecece; padding: 7px 10px; raza de graniță: 2px; 

Paginile care urmează să fie rulate

Fiecare pagină care va fi direcționată către DIV cu ng-view directiva din interiorul fișierului HTML principal poate avea o structură HTML unică și stilul CSS.

Sa incepem cu page1.html.

Deoarece dorim un stil specific pentru fiecare pagină, avem nevoie de fișiere CSS separate pentru fiecare pagină. Prin urmare, vom crea, de asemenea, un fișier numit page1.css, care va conține regulile de stil page1.html.

Structura HTML de bază pentru pagina1 este după cum urmează:

 

Pagina 1

Lorem ipsum dolor stai în ordine, consecutiv, în timp ce se ascultă, în timp ce lucrați în timpul muncii și alături de magna aliqua. Ut enim ad minim veniam, quis exerciții de muncă ultima lucrătoare aliquip ex a commodo consequat. Duis aute irure dolor în reputație în voluptate comandă esse cillum dolore eu fugiat nulla pariatur.

În partea de sus, ne-am conectat la fișierul CSS care va fi stilul paginii și am declarat un DIV cu numele de ID Pagina 1, unde va fi pus întregul conținut.

Voi păstra o simplă, dar vă stau complet la îndoială cum să structurați fișierul HTML. Doar țineți minte că containerul dvs. va fi întotdeauna DIV la care ng-view directiva este atribuită. Deci, tot în paginile dvs. rutate va fi relativ la acel DIV.

Stilul lui page1.html este prezentat mai jos:

# page1 font-family: Arial;  h1 culoare: # ffa42a; 

Celelalte trei pagini pot fi complet diferite, dar, din motive de simplitate, folosesc același șablon pentru fiecare pagină HTML și fișiere CSS ușor diferite (diferite h1 Text-culori).

pagina2.html și pagina2.css

 

Pagina 2

În cazul în care aveți nevoie de un minim de exerciții fizice sau de un exercițiu fizic existent, În cazul în care vă aflați într-o anumită măsură, căutați-le în căsuța de comandă, faceți clic pe următoarea indicație, apoi apăsați pe butonul din stânga sus.?

# pagină2 font-family: Arial;  h1 culoare: cornflowerblue; 

page3.html & page3.css

 

Pagina 3

Lorem ipsum dolor stai în ordine, consecutiv, în timp ce se ascultă, în timp ce lucrați în timpul muncii și alături de magna aliqua. Ut enim ad minim veniam, quis exerciții de muncă ultima lucrătoare aliquip ex a commodo consequat. Duis aute irure dolor în reputație în voluptate comandă esse cillum dolore eu fugiat nulla pariatur.

# page3 font-family: Arial;  h1 culoare: # b2ce6f; 

page4.html & page4.css

 

Pagina 4

În cazul în care aveți nevoie de un minim de exerciții fizice sau de un exercițiu fizic existent, În cazul în care vă aflați într-o anumită măsură, căutați-le în căsuța de comandă, faceți clic pe următoarea indicație, apoi apăsați pe butonul din stânga sus.?


# page4 font-family: Arial;  h1 culoare: # ff4517; 

Setarea ngRoute & ngAnimate în JavaScript

Până acum, am finalizat toate fișierele HTML și CSS necesare. Acum este timpul să scrieți codul JavaScript care controlează rutarea și animația.

De la noi ng-app directiva este numită mainApp, folosim acest id în funcția modulului. Trebuie, de asemenea, să includem ngRoute și ngAnimate dependențe.

mainAngular = angular.module ("mainApp", ['ngRoute', 'ngAnimate'));

Acum avem acces la $ routeProvider și $ locationProvider.

Vom folosi $ routeProvider pentru a gestiona rutina și $ locationProvider pentru a schimba hashPrefix, care este setat la ! în mod implicit.

Folosim .când ('/ page1', templateUrl: 'page1.html') pentru a defini pagina care trebuie redirecționată atunci când Pagina 1 este făcută clic pe fișierul HTML principal.

Repetăm ​​aceeași linie de cod pentru fiecare pagină care trebuie direcționată. În final, vom folosi .altfel (redirectTo: '/ page1'), care gestionează numele de pagini neașteptate. Dacă încercați să vizitați un nume de pagină nedefinit, spuneți page5, vi se va redirecționa Pagina 1.

Codul JavaScript complet este de mai jos:

var mainAngular = angular.module ("mainApp", ['ngRoute', 'ngAnimate']); mainAngular.config (functie ($ routeProvider, $ locationProvider) $ routeProvider .when ('/ page1', templateUrl: 'page1.html') .when ('/ page2', templateUrl:'page2.html '  .when ('/ page3', templateUrl: 'page3.html')). când ('/ page4', templateUrl: 'page4.html') altfel (redirectTo: '/ page1'); $ locationProvider.hashPrefix ("););

Notă suplimentară:Dacă doriți să adăugați o specificație ng-controler directive pentru toate paginile care urmează să fie direcționate, puteți face acest lucru în interiorul $ routeProvider.

Un exemplu pentru Pagina 1:

.când ('/ page1', templateUrl: 'page1.html', controler: 'page1Controller')

În cele din urmă, pagina noastră ar trebui să arate astfel și ar trebui să navigați între pagini fără animații de tranziție.

Animarea tranzițiilor paginii

Acum este momentul să animați tranzițiile rutei.

În scopuri de animație, AngularJS are built-in clase CSS grație dependenței ngAnimate.

Aceste clase pe care le vom folosi sunt:

  • ng-enter: Stilurile CSS de pornire pentru animația enter.
  • ng-enter-activă: Stilurile CSS de finisare pentru animația enter.
  • ng-leave: Stilurile CSS de pornire pentru animația de concediu.
  • ng-concediu activ: Stilurile CSS de finisare pentru animația de concediu.

Deci, conținutul redirecționat care intră în pagina principală are o tranziție de la ng-enter la ng-enter-activă. De asemenea, conținutul care iese din pagina principală are o tranziție de la ng-leave la ng-concediu activ.

Trebuie să atașăm clasele mai sus menționate routedContent clasă.

O tranziție de exemplu este prezentată mai jos. Puteți să creați propria animație de tranziție sau să o utilizați în interiorul dvs. style.css fişier.

# routedContent.ng-introduceți transform: translateX (-500px); opacitate: 0; -webkit-transition: toate 0.35s cubic-bezier (1, .01,0, .99); -moz-tranziție: toate 0,35s cubic-bezier (1, .01,0, .99); -ms-tranziție: toate 0,35s cubic-bezier (1, .01,0, .99); -o-tranziție: toate 0,35s cubic-bezier (1, .01,0, .99); tranziție: toate 0,35s cubic-bezier (1, .01,0, .99);  # routedContent.ng-introduceți-activ transform: translateX (0px); opacitate: 1;  # routedContent.ng-lăsați transform: translateX (0); opacitate: 1; -webkit-transition: toate 0.35s cubic-bezier (1, .01,0, .99); -moz-tranziție: toate 0,35s cubic-bezier (1, .01,0, .99); -ms-tranziție: toate 0,35s cubic-bezier (1, .01,0, .99); -o-tranziție: toate 0,35s cubic-bezier (1, .01,0, .99); tranziție: toate 0,35s cubic-bezier (1, .01,0, .99);  # routedContent.ng-lăsa-activ transform: translateX (500px); opacitate: 0; 

Mai jos este rezultatul final al proiectului pe Plunker.

Concluzie

În acest tutorial, am abordat modul de creare a aplicațiilor SPA cu ng-route modul de AngularJS, iar apoi am animat tranzițiile prin clasele CSS de ng-insufletit.

Utilizând doar patru clase CSS furnizate de ng-insufletit, puteți realiza diverse animații. Puteți să atașați întotdeauna clase suplimentare pentru a avea mai mult control asupra animațiilor de tranziție. De exemplu, puteți face ca pagina dvs. să aibă o direcție conștientă.

Am menționat, de asemenea, că prin atașarea controlor directivă la fiecare pagină specifică din interiorul $ routeProvider, puteți obține un control suplimentar asupra fiecărei pagini.

JavaScript, cu bibliotecile sale, cum ar fi Angular, a devenit una dintre limbile de facto de a lucra pe web. Nu este fără curbele sale de învățare, și există o mulțime de cadre și biblioteci pentru a vă menține ocupați. Dacă sunteți în căutarea unor resurse suplimentare pentru a studia sau a utiliza în munca dvs., verificați ce avem disponibil pe Envato Market.

Sper că acest tutorial ți-a dat o idee generală despre cum să folosești ng-route și ng-insufletit module împreună.

Cod