Setelah mempelajari Service untuk Recipe pada modul sebelumnya. Pada modul ini diharapkan Anda melakukan latihan.
Buat service untuk Shopping-List, dimana service akan menangani data dan fungsi add shopping list.
TIPS: Shopping-List service di registrasikan dalam scope aplikasi, jadi daftarkan di app.module.ts.
Nah, semoga latihan Anda sukses. Jika Ada masalah, silakan cek solusi yang kami sediakan.
Buat file shopping-list/shopping-list.service.ts, lalu masukan code berikut.
import { EventEmitter } from "@angular/core";
import { Ingredient } from "../shared/ingredient.model";
export class ShoppingListService{
newInggredientAdded = new EventEmitter<Ingredient[]>();
private ingredients : Ingredient[] = [
new Ingredient("Oreo", 1),
new Ingredient("Tepung", 1),
];
getIngredients(){
return this.ingredients.slice();
}
addIngredient(ingredient : Ingredient){
this.ingredients.push(ingredient);
//untuk handling event ketika new ingredient ditambahkan.
this.newInggredientAdded.emit(this.ingredients.slice());
}
}
File shopping-list.component.ts
import { Component, OnInit } from '@angular/core';
import { Ingredient } from '../shared/ingredient.model';
import { ShoppingListService } from './shopping-list.service';
@Component({
selector: 'app-shopping-list',
templateUrl: './shopping-list.component.html',
styleUrls: ['./shopping-list.component.css']
})
export class ShoppingListComponent implements OnInit {
ingredients! : Ingredient[];
constructor(private shoppingListServ : ShoppingListService) { }
ngOnInit(): void {
this.ingredients = this.shoppingListServ.getIngredients();
this.shoppingListServ.newInggredientAdded.subscribe(
(ingredients: Ingredient[]) =>{this.ingredients = ingredients;}
);
}
//tidak digunakan sudah dipindah ke service.
// onIngredientAdded(ingredient : Ingredient){
// this.ingredients.push(ingredient);
// }
}
File shopping-list.component.html
<div class="row">
<div class="col-xs-10">
<!-- tidak digunakan sudah dipindah ke service -->
<!-- <app-shopping-edit (ingredientAdded)="onIngredientAdded($event)"></app-shopping-edit> -->
<app-shopping-edit></app-shopping-edit>
<hr>
<ul class="list-group">
<a class="list-group-item" style="cursor:pointer" *ngFor="let ingredient of ingredients">
{{ingredient.name}} ({{ingredient.amount}})
</a>
</ul>
</div>
</div>
File shopping-edit.component.ts
//hapus eventEmitter dan Output module.
import { Component, ElementRef, EventEmitter, OnInit, Output, ViewChild } from '@angular/core';
import { Ingredient } from 'src/app/shared/ingredient.model';
import { ShoppingListService } from '../shopping-list.service';
@Component({
selector: 'app-shopping-edit',
templateUrl: './shopping-edit.component.html',
styleUrls: ['./shopping-edit.component.css']
})
export class ShoppingEditComponent implements OnInit {
@ViewChild('nameInput', {static:false}) nameInputRef!: ElementRef;
@ViewChild('amountInput', {static:false}) amountInputRef!: ElementRef;
//tidak digunakan, sudah dipindah ke service.
//@Output() ingredientAdded = new EventEmitter<Ingredient>();
constructor(private shoppingListServ : ShoppingListService) { }
ngOnInit(): void {
}
onAddItem(){
const _name = this.nameInputRef.nativeElement.value;
const _amount = this.amountInputRef.nativeElement.value;
const newIngredient = new Ingredient(_name, _amount);
//tidak digunakan sudah dipindah ke service.
//this.ingredientAdded.emit(newIngredient);
this.shoppingListServ.addIngredient(newIngredient);
}
}
Seperti yang sudah dibahas pada awal modul, service akan diregistrasikan pada level aplikasi.
File app.module.ts
import { NgModule} from '@angular/core';
import { BrowserModule } from '@angular/platform-browser';
import {FormsModule } from '@angular/forms';
import { AppComponent } from './app.component';
import { HeaderComponent } from './header/header.component';
import { RecipesComponent } from './recipes/recipes.component';
import { RecipeListComponent } from './recipes/recipe-list/recipe-list.component';
import { RecipeDetailComponent } from './recipes/recipe-detail/recipe-detail.component';
import { RecipeItemComponent } from './recipes/recipe-list/recipe-item/recipe-item.component';
import { ShoppingListComponent } from './shopping-list/shopping-list.component';
import { ShoppingEditComponent } from './shopping-list/shopping-edit/shopping-edit.component';
import { DropDownDirective } from './shared/dropdown.directive';
import { ShoppingListService } from './shopping-list/shopping-list.service';
@NgModule({
declarations: [
AppComponent,
HeaderComponent,
RecipesComponent,
RecipeListComponent,
RecipeDetailComponent,
RecipeItemComponent,
ShoppingListComponent,
ShoppingEditComponent,
DropDownDirective
],
imports: [
BrowserModule,
FormsModule
],
providers: [ShoppingListService],
bootstrap: [AppComponent]
})
export class AppModule { }
Nah, semoga dengan latihan ini, Anda semakin paham dalam menggunakan Service. Pada modul selanjutnya kita akan belajar passing data antar service.