Opprett en enkel handlekurv ved hjelp av AngularJS Del 3

I den forrige delen av denne opplæringsserien opprettet vi et tilpasset direktiv og brukte det i vår enkle handlekurvprogram. I denne delen av opplæringsserien ser vi hvordan du gjør den totale div-platen til toppen mens du ruller nettleseren. Vi lager også en betalingsside hvor vi viser alle elementene valgt av brukeren.

Starter

La oss begynne med å klone den forrige delen av opplæringen fra GitHub.

git klon https://github.com/jay3dec/AngularShoppingCart_Part2.git

Etter kloning av kildekoden, naviger til prosjektkatalogen og installer de nødvendige avhengighetene.

cd AngularShoppingCart_Part2 npm installere

Når avhengighetene er installert, start serveren

node server.js

Pek nettleseren din til http: // localhost: 3000 / og du bør ha programmet kjører.

Fest Total Div 

Selv om vi bruker bootstrap-påfyllingsdelen for å holde total div på toppen, virker det ikke som forventet. La oss undersøke hva som går galt. 

Oppstartskomponentdelen legger til en klasse som kalles feste når vi ruller over en viss høyde og feste-top når det er under. Den fungerer fortsatt i de enkle HTML-sidene, men når det integreres i AngularJS, ser det ikke ut til å fungere. For å fikse dette problemet, fortsetter vi å sjekke rullehøyden, og når den er over og under en viss høyde, si 50 px, legger vi til påføringsklassene tilsvarende.

Så, forutsatt at vi har rullehøyde som bla, Legg til feste og feste-top klasser til Total div ved hjelp av ngClass-direktivet.

ng-class = "'affix': bla> 50, 'affix-top': bla <= 50"

For å få rulle skal vi opprette et annet direktiv. La oss nevne direktivet getScroll. Dette direktivet vil oppdatere bla Verdien hver gang nettleservinduet rulles, og basert på bla Festklassene vil bli oppdatert.

.Direktivet ('getScroll', funksjon ($ vindu) return scope: scroll: '= scroll', lenke: funksjon (omfang, element, attrs) var scrollwindow = angular.element ($ window); scrollwindow.on ('scroll', scope. $ apply.bind (omfang, funksjon () scope.scroll = scrollwindow.scrollTop ();));;)

Som vist i koden ovenfor overfører vi et rullattributt til getScroll direktiv. På rulle beregner vi rullehøyden fra toppen ved hjelp av angular.element ($ vindu). På hver rullehendelse oppdaterer vi bla omfang variabel.

Legg til ovennevnte direktiv til slutten av cart.html side.

Lagre disse endringene og oppdatere siden. Prøv å bla i nettleservinduet og summen skal festes øverst, alltid synlig.

Implementere en Checkout-side

For å fylle ut kassen siden med de valgte elementene, må vi sende elementene mellom kontrollerne. Så vi skal benytte en AngularJS-tjeneste for å overføre dataene mellom kontrollerne. La oss lage en tjeneste som heter CommonProp hvor vi vil lagre de valgte produktene og også den totale prisen. Åpne opp cart.js og opprett en tjeneste som kalles CommonProp som vist:

.service ('CommonProp', funksjon () var Items = "; var Totalt = 0; return getItems: function () return Items;, setItem: funksjon (verdi) Items = value;, getTotal: function ) return Total;, setTotal: funksjon (verdi) Total = verdi;;);

Som sett, inne i CommonProp service har vi definert fire funksjoner for å få og sette varer og totalpris. Injiser CommonProp tjeneste i CartCtrl.

.controller ('CartCtrl', ['$ scope', 'CommonProp', funksjon ($ scope, CommonProp) 

Vi ser etter endringer i shopData variabel og oppdater tjenestedataene tilsvarende. Legg til følgende kode innvendig CartCtrl.

$ scope. $ watch ('shopData', funksjon () CommonProp.setItem ($ scope.shopData);)

Innsiden checkout.js, injiser CommonProp tjeneste i CheckoutCtrl.

.controller ('CheckoutCtrl', ['$ scope', 'CommonProp', funksjon ($ scope, CommonProp) 

Vi skal bruke CommonProp service for å få varene og totalt i CheckoutCtrl.

.($ scope.items = CommonProp.getItems (); $ scope.total = CommonProp.getTotal ();]);

Ved hjelp av $ scope.items Vi fyller ut kassen siden. Åpne opp checkout.html og fjern det eksisterende hardkodede bordet. Vi skal gjøre bruk av ngRepeat-direktivet og $ scope.items å lage bordet og fylle det dynamisk.

I.item Rs. I.selected

Lagre endringene ovenfor og oppdater siden. Velg noen elementer, og klikk deretter på Sjekk ut knappen i handlekurven. En gang på kassen siden, bør den vise listen over elementer som er valgt.

La oss også inkludere prisen totalt i kassen siden. Så når summen er beregnet i totalfunksjonen i CartCtrl, oppdater CommonProp total verdi av tjenesten.

$ scope.total = funksjon () var t = 0; for (var k i $ scope.shopData) t + = parseInt ($ scope.shopData [k] .selected);  CommonProp.setTotal (t); retur t; 

For å vise totalt på kassen siden, ta med følgende tr HTML kode:

  Total:   Rs. Total  

Siden vi oppdaterer Total variabel variabel i CheckoutCtrl, summen vil automatisk bli vist. Lagre endringene og start på nytt. Velg noen elementer og velg kassen. En gang på kassen siden bør du kunne se de valgte elementene og den totale prisen.

En gang på kassen siden, hvis du klikker på Tilpass knappen vil du bli tatt til vogn siden, men alle valgene vil være borte. Så vi må fikse det. Når vogn siden er lastet, vil vi sjekke CommonProp service for eksisterende elementer. Hvis elementer er til stede, bruker vi disse elementene til å fylle på vognsiden.

Innsiden CartCtrl sjekk om noen varer finnes i CommonProp og sett $ scope.shopData.

hvis (CommonProp.getItems ()! = ") $ scope.shopData = CommonProp.getItems ();

Lagre alle de ovennevnte endringene og start serveren på nytt. Fra vogn siden, velg noen elementer og klikk deretter Sjekk ut å navigere til kassen siden. En gang på kassen siden, klikk på Tilpass knappen for å komme tilbake til handlekurven. Og du bør ha alle valgene som er gjort, som de er, i handlekurven.

Konklusjon

I denne delen av opplæringsserien implementerte vi kassen siden og så hvordan du deler data mellom ulike kontrollører ved hjelp av en AngularJS-tjeneste. Vi har også opprettet et direktiv for å få rullehøyden og fikse oppstartsfeilproblemet.

Jeg håper du har lært noe nyttig fra denne opplæringsserien. For mer grundig informasjon angående AngularJS-direktiver, ta en titt på den offisielle dokumentasjonen.

Kildekode fra denne opplæringen er tilgjengelig på GitHub. Gi oss beskjed om dine tanker og rettelser i kommentarene nedenfor!