This post is a part of a series of posts that I am writing as I am building an app using Angular and ASP.NET Core 2.1. Links to previous posts –> A1, A2, A3, A4, A5, A6, A7, A8, A9 Github Repo
Today, I was able to accomplish few things,
1. Added Shopping service that adds product and updates shopping cart
2. Established cross component communication via Shopping Service (Home Component –> Add To Cart –> Updates Shopping Cart
3. Created API for adding and getting products from ShoppingCart Controller. I am returning hard coded products and hence you will always see two shown at the top right.
Right now I didn’t wanted to create any database backend. I want to just make sure client server interaction is in sync. Once I like how everything is structured then I will invest time into adding database layer. Below is code for Shopping Service.
Next thing I want to learn is authentication and authorization with ASP.NET Core.
Today, I was able to accomplish few things,
1. Added Shopping service that adds product and updates shopping cart
2. Established cross component communication via Shopping Service (Home Component –> Add To Cart –> Updates Shopping Cart
3. Created API for adding and getting products from ShoppingCart Controller. I am returning hard coded products and hence you will always see two shown at the top right.
Right now I didn’t wanted to create any database backend. I want to just make sure client server interaction is in sync. Once I like how everything is structured then I will invest time into adding database layer. Below is code for Shopping Service.
import { Injectable, Inject } from '@angular/core'; import { BehaviorSubject } from 'rxjs'; import { HttpClient, HttpHeaders } from '@angular/common/http'; import { Product } from '../product/product'; import { catchError, map, tap,last } from 'rxjs/operators'; import 'rxjs/add/observable/throw'; import { of } from 'rxjs/observable/of'; import { Observable } from 'rxjs/Observable'; const httpOptions = { headers: new HttpHeaders({ 'Content-Type': 'application/json' }) }; @Injectable() export class ShoppingService { private _baseUrl: string; private cartQuantitySource = new BehaviorSubject(0); currentCartQuantity = this.cartQuantitySource.asObservable(); private _addProductToShoppingCart: string = "api/ShoppingCart/Add/"; private _getProductsFromShoppingCart: string = "api/ShoppingCart/Products"; constructor(private _http: HttpClient, @Inject('BASE_URL') baseUrl: string) { this._baseUrl = baseUrl; this.updateCartQuantity(); } updateCartQuantity() { this._http.get<Product[]>(this._baseUrl + this._getProductsFromShoppingCart).subscribe(products => { this.log(`getting products from shopping cart`); this.cartQuantitySource.next(products.length); }); } addProductToCart(product: Product) { this._http.post(this._baseUrl + this._addProductToShoppingCart + product.id, product, httpOptions).subscribe(x => { this.log(`added Product To Shopping Cart`); this.updateCartQuantity(); }); } private handleError<T>(operation = 'operation', result?: T) { return (error: any): Observable<T> => { console.log(error); //log to console instead this.log(`${operation} failed: ${error.message}`); return Observable.throw(error || 'Server error'); }; } private log(message: string) { console.log("Shopping Service " + message); } }One of the things, I am not liking is how api urls are hard coded as strings. This is something I want to improve upon. I will put them inside an injectable service which has all the urls.
Next thing I want to learn is authentication and authorization with ASP.NET Core.
No comments:
Post a Comment