Differenzansicht 04-services
im Vergleich zu 03-outputs

Zurück zur Übersicht | ← Vorherige | Nächste → | Demo | Quelltext auf GitHub
src/app/books-portal/books-overview-page/books-overview-page.ts CHANGED
@@ -1,7 +1,8 @@
1
- import { Component, signal } from '@angular/core';
2
 
3
  import { Book } from '../../shared/book';
4
  import { BookCard } from '../book-card/book-card';
 
5
 
6
  @Component({
7
  selector: 'app-books-overview-page',
@@ -10,30 +11,13 @@ import { BookCard } from '../book-card/book-card';
10
  styleUrl: './books-overview-page.css',
11
  })
12
  export class BooksOverviewPage {
 
 
13
  protected books = signal<Book[]>([]);
14
  protected likedBooks = signal<Book[]>([]);
15
 
16
  constructor() {
17
- this.books.set([
18
- {
19
- isbn: '12345',
20
- title: 'Tierisch gut kochen',
21
- authors: ['Mrs Chimp', 'Mr Gorilla'],
22
- subtitle: 'Rezepte von Affe bis Zebra',
23
- imageUrl: 'https://cdn.ng-buch.de/kochen.jpg',
24
- description: 'Immer lecker und gut',
25
- createdAt: new Date().toISOString(),
26
- },
27
- {
28
- isbn: '67890',
29
- title: 'Backen mit Affen',
30
- subtitle: 'Bananenbrot und mehr',
31
- authors: ['Orang Utan'],
32
- imageUrl: 'https://cdn.ng-buch.de/backen.jpg',
33
- description: 'Tolle Backtipps für Mensch und Tier',
34
- createdAt: new Date().toISOString(),
35
- },
36
- ]);
37
  }
38
 
39
  addLikedBook(newLikedBook: Book) {
 
1
+ import { Component, inject, signal } from '@angular/core';
2
 
3
  import { Book } from '../../shared/book';
4
  import { BookCard } from '../book-card/book-card';
5
+ import { BookStore } from '../../shared/book-store';
6
 
7
  @Component({
8
  selector: 'app-books-overview-page',
 
11
  styleUrl: './books-overview-page.css',
12
  })
13
  export class BooksOverviewPage {
14
+ #bookStore = inject(BookStore);
15
+
16
  protected books = signal<Book[]>([]);
17
  protected likedBooks = signal<Book[]>([]);
18
 
19
  constructor() {
20
+ this.books.set(this.#bookStore.getAll());
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
21
  }
22
 
23
  addLikedBook(newLikedBook: Book) {
src/app/shared/book-store.spec.ts ADDED
@@ -0,0 +1,21 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import { TestBed } from '@angular/core/testing';
2
+
3
+ import { BookStore } from './book-store';
4
+
5
+ describe('BookStore', () => {
6
+ let service: BookStore;
7
+
8
+ beforeEach(() => {
9
+ TestBed.configureTestingModule({});
10
+ service = TestBed.inject(BookStore);
11
+ });
12
+
13
+ it('should be created', () => {
14
+ expect(service).toBeTruthy();
15
+ });
16
+
17
+ it('should return a list of books', () => {
18
+ const books = service.getAll();
19
+ expect(books.length).toBeGreaterThan(0);
20
+ });
21
+ });
src/app/shared/book-store.ts ADDED
@@ -0,0 +1,34 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import { Injectable } from '@angular/core';
2
+
3
+ import { Book } from './book';
4
+
5
+ @Injectable({
6
+ providedIn: 'root'
7
+ })
8
+ export class BookStore {
9
+
10
+ #books: Book[] = [
11
+ {
12
+ isbn: '12345',
13
+ title: 'Tierisch gut kochen',
14
+ authors: ['Mrs Chimp', 'Mr Gorilla'],
15
+ subtitle: 'Rezepte von Affe bis Zebra',
16
+ imageUrl: 'https://cdn.ng-buch.de/kochen.jpg',
17
+ description: 'Immer lecker und gut',
18
+ createdAt: new Date().toISOString()
19
+ },
20
+ {
21
+ isbn: '67890',
22
+ title: 'Backen mit Affen',
23
+ subtitle: 'Bananenbrot und mehr',
24
+ authors: ['Orang Utan'],
25
+ imageUrl: 'https://cdn.ng-buch.de/backen.jpg',
26
+ description: 'Tolle Backtipps für Mensch und Tier',
27
+ createdAt: new Date().toISOString()
28
+ }
29
+ ];
30
+
31
+ getAll(): Book[] {
32
+ return this.#books;
33
+ }
34
+ }