diff --git a/demo/src/app/Product.ts b/demo/src/app/Product.ts
new file mode 100644
index 0000000..423ef54
--- /dev/null
+++ b/demo/src/app/Product.ts
@@ -0,0 +1,5 @@
+export interface Product {
+ id: number;
+ name: string;
+ stock: number; // Anzahl an Lager
+}
diff --git a/demo/src/app/app.routes.ts b/demo/src/app/app.routes.ts
index 8c823e4..683e11f 100644
--- a/demo/src/app/app.routes.ts
+++ b/demo/src/app/app.routes.ts
@@ -1,8 +1,10 @@
import { Routes } from '@angular/router';
import { StudentForm } from './student-form/student-form';
import { StudentFormReactive } from './student-form-reactive/student-form-reactive';
+import { OrderComponent } from './order-component/order-component';
export const routes: Routes = [
{ path: 'student', component: StudentForm },
- { path: 'student-reactive', component: StudentFormReactive }
+ { path: 'student-reactive', component: StudentFormReactive },
+ { path: 'order', component: OrderComponent },
];
diff --git a/demo/src/app/order-component/order-component.css b/demo/src/app/order-component/order-component.css
new file mode 100644
index 0000000..e69de29
diff --git a/demo/src/app/order-component/order-component.html b/demo/src/app/order-component/order-component.html
new file mode 100644
index 0000000..c8ec570
--- /dev/null
+++ b/demo/src/app/order-component/order-component.html
@@ -0,0 +1,25 @@
+
+ @for (product of products; track product.id) {
+ -
+ {{ product.name }} - Bestand: {{ product.stock }}
+ @if (product.stock == 0) { (AUSVERKAUFT) }
+
+ }
+
+
+
+
+
+
diff --git a/demo/src/app/order-component/order-component.spec.ts b/demo/src/app/order-component/order-component.spec.ts
new file mode 100644
index 0000000..72d0a86
--- /dev/null
+++ b/demo/src/app/order-component/order-component.spec.ts
@@ -0,0 +1,23 @@
+import { ComponentFixture, TestBed } from '@angular/core/testing';
+
+import { OrderComponent } from './order-component';
+
+describe('OrderComponent', () => {
+ let component: OrderComponent;
+ let fixture: ComponentFixture;
+
+ beforeEach(async () => {
+ await TestBed.configureTestingModule({
+ imports: [OrderComponent]
+ })
+ .compileComponents();
+
+ fixture = TestBed.createComponent(OrderComponent);
+ component = fixture.componentInstance;
+ await fixture.whenStable();
+ });
+
+ it('should create', () => {
+ expect(component).toBeTruthy();
+ });
+});
diff --git a/demo/src/app/order-component/order-component.ts b/demo/src/app/order-component/order-component.ts
new file mode 100644
index 0000000..fc14e33
--- /dev/null
+++ b/demo/src/app/order-component/order-component.ts
@@ -0,0 +1,45 @@
+import { HttpClient } from '@angular/common/http';
+import { Component } from '@angular/core';
+import { Product } from '../Product';
+import { FormControl, FormGroup, ReactiveFormsModule, Validators } from '@angular/forms';
+
+const API_URL = 'https://api.lager.de';
+
+@Component({
+ selector: 'app-order-component',
+ imports: [ReactiveFormsModule],
+ templateUrl: './order-component.html',
+ styleUrl: './order-component.css',
+})
+export class OrderComponent {
+ products: Product[];
+ orderForm: FormGroup = null!;
+
+ constructor(private readonly httpClient: HttpClient) {
+ this.products = [];
+ }
+
+ ngOnInit() {
+ this.orderForm = new FormGroup({
+ productName: new FormControl('', Validators.required),
+ amount: new FormControl(1),
+ });
+
+ this.loadProducts();
+ }
+
+ loadProducts() {
+ this.httpClient.get(API_URL + '/products').subscribe((products) => {
+ this.products = products;
+ });
+ }
+
+ submitOrder() {
+ console.log('Sende Bestellung...');
+ const name = this.orderForm?.value.productName;
+ const body = this.orderForm?.value;
+ this.httpClient.post(API_URL + '/orders/' + name, body).subscribe((response) => {
+ console.log('Erfolg', response);
+ });
+ }
+}