Creare un semplice carrello acquisti utilizzando AngularJS parte 3

Nella parte precedente di questa serie di tutorial, abbiamo creato una direttiva personalizzata e l'abbiamo utilizzata nella nostra semplice applicazione del carrello degli acquisti. In questa parte della serie di tutorial, vedremo come rendere il div totale in cima mentre si scorre il browser. Creeremo anche una pagina di checkout in cui verranno visualizzati tutti gli elementi selezionati dall'utente.

Iniziare

Iniziamo clonando la parte precedente del tutorial da GitHub.

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

Dopo la clonazione del codice sorgente, accedere alla directory del progetto e installare le dipendenze richieste.

cd AngularShoppingCart_Part2 npm install

Una volta installate le dipendenze, avviare il server

nodo server.js

Puntare il browser su http: // localhost: 3000 / e si dovrebbe avere l'applicazione in esecuzione.

Applica il Total Div 

Anche se stiamo usando il componente app di bootstrap per mantenere il div totale in alto, non funziona come previsto. Esaminiamo cosa sta andando male. 

Il componente app di bootstrap aggiunge una classe chiamata apporre quando scorriamo sopra una certa altezza e apporre-top quando è sotto Funziona ancora nelle semplici pagine HTML, ma se integrato in AngularJS non sembra funzionare. Per risolvere questo problema, terremo un controllo sull'altezza dello scroll e quando è sopra e sotto una certa altezza, diciamo 50 px, aggiungeremo le classi affix di conseguenza.

Quindi, assumendo che abbiamo l'altezza di scorrimento come scorrere, Aggiungi il apporre e apporre-top classi al Totale div usando la direttiva ngClass.

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

Per ottenere lo scroll creeremo un'altra direttiva. Diamo un nome alla direttiva getScroll. Questa direttiva aggiornerà il scorrere valore ogni volta che si scorre la finestra del browser e in base a scorrere le classi affix saranno aggiornate.

.direttiva ('getScroll', function ($ window) return scope: scroll: '= scroll', link: function (scope, element, attrs) var scrollwindow = angular.element ($ window); scrollwindow.on ('scroll', scope. $ apply.bind (scope, function () scope.scroll = scrollwindow.scrollTop ();));;)

Come visto nel codice sopra, stiamo passando un attributo scroll al getScroll direttiva. In scroll stiamo calcolando l'altezza di scroll dall'alto usando angular.element ($ finestra). Ad ogni evento di scroll aggiorniamo il scorrere variabile di scope.

Aggiungi la direttiva sopra alla fine del cart.html pagina.

Salva queste modifiche e aggiorna la pagina. Prova a scorrere la finestra del browser e il totale dovrebbe essere affisso in alto, sempre visibile.

Implementazione di una pagina di verifica

Per popolare la pagina di checkout con gli articoli selezionati, dovremo passare gli articoli tra i controller. Quindi utilizzeremo un servizio AngularJS per trasferire i dati tra i controller. Creiamo un servizio chiamato CommonProp dove salveremo gli articoli selezionati e anche il prezzo totale. Aprire cart.js e creare un servizio chiamato CommonProp come mostrato:

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

Come visto, dentro CommonProp servizio abbiamo definito quattro funzioni per ottenere e impostare gli articoli e il prezzo totale. Inietti il CommonProp servizio nel CartCtrl.

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

Guarderemo per qualsiasi cambiamento nel shopData variabile e aggiornare i dati del servizio di conseguenza. Aggiungi il seguente codice all'interno CartCtrl.

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

Dentro checkout.js, iniettare il CommonProp servizio in CheckoutCtrl.

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

Useremo il CommonProp servizio per ottenere gli articoli e il totale in CheckoutCtrl.

.controller ('CheckoutCtrl', ['$ scope', 'CommonProp', function ($ scope, CommonProp) $ scope.items = CommonProp.getItems (); $ scope.total = CommonProp.getTotal ();]);

utilizzando $ scope.items compileremo la pagina di pagamento. Aprire checkout.html e rimuovi la tabella codificata esistente. Useremo la direttiva ngRepeat e $ scope.items per creare la tabella e popolarla in modo dinamico.

I.item Rs. Ho selezionato

Salvare le modifiche precedenti e aggiornare la pagina. Selezionare alcuni elementi e quindi fare clic su Check-out pulsante nella pagina del carrello. Una volta sulla pagina di checkout, dovrebbe visualizzare l'elenco degli elementi selezionati.

Includiamo anche il totale del prezzo nella pagina di pagamento. Quindi quando il totale è calcolato nella funzione totale in CartCtrl, aggiorna il CommonProp servizio valore totale.

$ scope.total = function () var t = 0; for (var k in $ scope.shopData) t + = parseInt ($ scope.shopData [k] .selected);  CommonProp.setTotal (t); ritorno t; 

Per visualizzare il totale nella pagina di pagamento, includere quanto segue TR Codice HTML:

  Totale:   Rs. totale  

Dal momento che stiamo aggiornando il totale variabile di scope in CheckoutCtrl, il totale verrà automaticamente visualizzato. Salva le modifiche e ricomincia da capo. Seleziona alcuni articoli e seleziona Cassa. Una volta sulla pagina di checkout dovresti essere in grado di vedere gli articoli selezionati e il prezzo totale.

Una volta sulla pagina di pagamento, se si fa clic sul personalizzare pulsante verrai reindirizzato alla pagina del carrello, ma tutte le selezioni saranno perse. Quindi dobbiamo aggiustarlo. Una volta caricata la pagina del carrello, controlleremo il CommonProp servizio per eventuali articoli esistenti. Se sono presenti elementi, utilizzeremo tali elementi per popolare la pagina del carrello.

Dentro CartCtrl controlla se qualche elemento esiste in CommonProp e impostare il $ scope.shopData.

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

Salvare tutte le modifiche precedenti e riavviare il server. Dalla pagina del carrello, selezionare alcuni elementi e quindi fare clic su Check-out per navigare fino alla pagina di pagamento. Una volta nella pagina di pagamento, fai clic su personalizzare pulsante per tornare alla pagina del carrello. E dovresti avere tutte le selezioni fatte, come sono, nella pagina del carrello.

Conclusione

In questa parte della serie di tutorial, abbiamo implementato la pagina di checkout e abbiamo visto come condividere i dati tra diversi controller utilizzando un servizio AngularJS. Abbiamo anche creato una direttiva per ottenere l'altezza di scorrimento e risolvere il problema del affisso bootstrap.

Spero che tu abbia imparato qualcosa da questa serie di tutorial. Per ulteriori informazioni approfondite riguardanti le direttive AngularJS, dare un'occhiata alla documentazione ufficiale.

Il codice sorgente di questo tutorial è disponibile su GitHub. Fateci sapere i vostri pensieri e correzioni nei commenti qui sotto!