Differenzansicht 04-services

im Vergleich zu 03-outputs

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,32 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import { Service } from '@angular/core';
2
+
3
+ import { Book } from './book';
4
+
5
+ @Service()
6
+ export class BookStore {
7
+
8
+ #books: Book[] = [
9
+ {
10
+ isbn: '12345',
11
+ title: 'Tierisch gut kochen',
12
+ authors: ['Mrs Chimp', 'Mr Gorilla'],
13
+ subtitle: 'Rezepte von Affe bis Zebra',
14
+ imageUrl: 'https://cdn.ng-buch.de/kochen.jpg',
15
+ description: 'Immer lecker und gut',
16
+ createdAt: new Date().toISOString()
17
+ },
18
+ {
19
+ isbn: '67890',
20
+ title: 'Backen mit Affen',
21
+ subtitle: 'Bananenbrot und mehr',
22
+ authors: ['Orang Utan'],
23
+ imageUrl: 'https://cdn.ng-buch.de/backen.jpg',
24
+ description: 'Tolle Backtipps für Mensch und Tier',
25
+ createdAt: new Date().toISOString()
26
+ }
27
+ ];
28
+
29
+ getAll(): Book[] {
30
+ return this.#books;
31
+ }
32
+ }