ใน App ของเรานั้นจำเป็นต้องมี Service เอาไว้ใช้งาน เราสามารถใช้ในการจัดการข้อมูล และดึงข้อมูลจากแหล่งข้อมูลอื่น ๆ ผ่านทาง Service ได้ สำคัญมาก
สร้าง Service ชื่อ CartService ไว้เก็บข้อมูลการสั่งซื้อมือถือ ให้ใช้คำสั่ง "ng generate service cart" เสร็จแล้วเราจะได้ไฟล์มา 2 ไฟล์
1. "src/app/cart.service.spec.ts" และ 2. "src/app/cart.service.ts" เราจะเข้ามาแก้ไฟล์ที่ 2. นี่กัน
import { Injectable } from '@angular/core';
@Injectable({
providedIn: 'root'
})
export class CartService {
constructor() { }
}
ให้เราเพิ่ม Function 3 ตัวคือ addItem() ใช้เพิ่ม Item ลงตะกร้า , getItems() เรียกดูค่า Item ในตะกร้า และ clearItems() ลบ Item ออกจากตะกร้าทั้งหมด
import { Injectable } from '@angular/core';
@Injectable({
providedIn: 'root'
})
export class CartService {
items = [];
addItem(product) {
this.items.push(product);
}
getItems() {
return this.items;
}
clearItems() {
this.items = [];
}
constructor() { }
}
ทำการ Import CartService เพิ่มลงใน Constructor และสร้าง Function ในการ Add Item ลงตะกร้า และ View Item ในตะกร้า
import { Component, OnInit } from '@angular/core';
import { products } from '../static/products';
import { CartService } from '../cart.service';
@Component({
selector: 'app-product-list',
templateUrl: './product-list.component.html',
styleUrls: ['./product-list.component.css']
})
export class ProductListComponent implements OnInit {
title = 'Product List';
productList = products;
share() {
window.alert("The product has been shared!");
}
add(product) {
window.console.log(product);
this.cartService.addItem(product);
}
view() {
window.console.log(this.cartService.getItems());
}
onNotify() {
window.alert('You will be notified when the product goes on sale');
}
constructor(private cartService: CartService) { }
ngOnInit() {
}
}
สุดท้ายสร้างปุ่ม Add [บรรทัดที่ 13-14] และ View [บรรทัดที่ 24-26] แล้วทดสอบการทำงาน
<h1>{{title}}</h1>
<div *ngFor="let product of productList; index as productId">
<a [title]="'Description: ' + product.description" [routerLink]="['/product', productId]">
{{product.name}}
</a>
<p *ngIf="product.description">
{{product.description}}
</p>
<button (click)="add(product)">
Add To Cart
</button>
<button (click)="share()">
Share
</button>
<app-product-alerts [product]="product" (notify)="onNotify()"></app-product-alerts>
</div>
<button (click)="view()">
View Cart
</button>
แสดงการ Add 2 Item แล้ว View Items
สร้างหน้า Cart เพื่อให้แสดง Items ที่อยู่ใน Cart Service ใช้คำสั่ง "ng generate component cart"
เปลี่ยนคำสั่ง View ใน Button View Cart ให้ไปที่หน้า Cart
<h1>{{title}}</h1>
<div *ngFor="let product of productList; index as productId">
<a [title]="'Description: ' + product.description" [routerLink]="['/product', productId]">
{{product.name}}
</a>
<p *ngIf="product.description">
{{product.description}}
</p>
<button (click)="add(product)">
Add To Cart
</button>
<button (click)="share()">
Share
</button>
<app-product-alerts [product]="product" (notify)="onNotify()"></app-product-alerts>
</div>
<button [routerLink]="['/cart']">
View Cart
</button>
ต่อมาทำการ Import Cart Service [บรรทัดที่ 3] ใน Cart Component, กำหนดตัวแปร Item ไว้รอรับข้อมูล [บรรทัดที่ 12],
เพิ่ม cartService ที่ Contructor [บรรทัดที่ 14] และดึงค่ามาลงที่ Items ที่ประกาศไว้ [บรรทัดที่ 17] แล้วเขียน Template เพื่อแสดงผล
import { Component, OnInit } from '@angular/core';
import { CartService } from '../cart.service';
@Component({
selector: 'app-cart',
templateUrl: './cart.component.html',
styleUrls: ['./cart.component.css']
})
export class CartComponent implements OnInit {
items;
constructor(private cartService: CartService) { }
ngOnInit() {
this.items = this.cartService.getItems();
}
}
<h1>Cart</h1>
<div class="cart-item" *ngFor="let item of items; index as itemId">
<span>{{item.name}}</span>
<span>{{item.price || currency }}</span>
</div>
สรุปอ่านแล้วทำให้เข้าใจ
ไม่มีความคิดเห็น:
แสดงความคิดเห็น