Workshop Discussion Thread #1
Replies: 43 comments
-
<div class="container">
<h1>
<img
width="100"
alt="Angular Logo"
src="data:image/png;base64,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"
/>
{{ title }}
</h1>
<!-- <router-outlet></router-outlet> -->
</div> |
Beta Was this translation helpful? Give feedback.
-
|
Beta Was this translation helpful? Give feedback.
-
|
Beta Was this translation helpful? Give feedback.
-
|
Beta Was this translation helpful? Give feedback.
-
|
Beta Was this translation helpful? Give feedback.
-
|
Beta Was this translation helpful? Give feedback.
-
Hands on1.) Display the total number of books |
Beta Was this translation helpful? Give feedback.
-
@switch (b.rating) {
@case (1) { <span class="badge bg-secondary">⭐</span> }
@case (2) { <span class="badge bg-secondary">⭐⭐</span> }
@case (3) { <span class="badge bg-secondary">⭐⭐⭐</span> }
@case (4) { <span class="badge bg-secondary">⭐⭐⭐⭐</span> }
@case (5) { <span class="badge bg-secondary">⭐⭐⭐⭐⭐</span> }
@default { <span>😔</span> } |
Beta Was this translation helpful? Give feedback.
-
|
Beta Was this translation helpful? Give feedback.
-
Beta Was this translation helpful? Give feedback.
-
Component Libraries that are widely used: |
Beta Was this translation helpful? Give feedback.
-
![]() |
Beta Was this translation helpful? Give feedback.
-
Beta Was this translation helpful? Give feedback.
-
|
Beta Was this translation helpful? Give feedback.
-
Dependency Injection |
Beta Was this translation helpful? Give feedback.
-
<form [formGroup]="bookForm" (ngSubmit)="submitForm()"> submitForm() {
const newBook: Book = {
...this.bookForm.getRawValue(),
rating: 1
};
// HandsOn: Form with Events
// 1. Create an event with name `create`
// 2. Emit the book
// 3. Subscribe to the event in dashboard
// 4. Add the new book to the array of books, respect immutability
this.bookForm.reset();
}
|
Beta Was this translation helpful? Give feedback.
-
![]() |
Beta Was this translation helpful? Give feedback.
-
HandsOnThe BookComponent is now a little bit too smart. It should not be aware of the hardcoded min/max values 1 and 5. Instead, accept two |
Beta Was this translation helpful? Give feedback.
-
🎮 NEW: RxJS PlaygroundYou can either
cd rxjs-playground
npm install
npm start Open the browser at http://localhost:4300 (!) to view the application. |
Beta Was this translation helpful? Give feedback.
-
|
Beta Was this translation helpful? Give feedback.
-
import { HttpClient } from '@angular/common/http';
import { inject, Injectable } from '@angular/core';
import { Observable } from 'rxjs';
import { Book } from './book';
@Injectable({
providedIn: 'root'
})
export class BookStoreService {
http = inject(HttpClient);
getAll(): Observable<Book[]> {
return this.http.get<Book[]>('https://api.angular.schule/books');
}
getSingle(isbn: string): Observable<Book> {
return this.http.get<Book>(`https://api.angular.schule/books/${isbn}`)
}
} |
Beta Was this translation helpful? Give feedback.
-
|
Beta Was this translation helpful? Give feedback.
-
Hands OnDisplay Thumbnails instead of cat images |
Beta Was this translation helpful? Give feedback.
-
Beta Was this translation helpful? Give feedback.
-
import { provideHttpClientTesting } from '@angular/common/http/testing';
// ...
TestBed.configureTestingModule({
providers: [
provideHttpClient(),
provideHttpClientTesting()
]
}); |
Beta Was this translation helpful? Give feedback.
-
|
Beta Was this translation helpful? Give feedback.
-
For Experts: Angular 19: Mastering effect and afterRenderEffect For Every-Day Usage, but in German: Neu in Angular 19: Daten laden mit der Resource API |
Beta Was this translation helpful? Give feedback.
-
import { HttpErrorResponse } from '@angular/common/http';
import { Component, inject } from '@angular/core';
import { toSignal } from '@angular/core/rxjs-interop';
import { ActivatedRoute, RouterLink } from '@angular/router';
import { catchError, map, of, retry, switchMap } from 'rxjs';
import { BookStoreService } from '../shared/book-store.service';
@Component({
selector: 'app-book-details',
imports: [
RouterLink
],
templateUrl: './book-details.component.html',
styleUrl: './book-details.component.scss'
})
export class BookDetailsComponent {
bs = inject(BookStoreService)
book = toSignal(inject(ActivatedRoute).paramMap.pipe(
map(paramMap => paramMap.get('isbn') || ''),
switchMap(isbn => this.bs.getSingle(isbn).pipe(
retry({
count: 3,
delay: 1000
}),
catchError((err: HttpErrorResponse) => of({
title: 'ERROR',
description: err.message
}))
))
));
} |
Beta Was this translation helpful? Give feedback.
-
Useful tools for Avoiding a Merge HellBeyond Compareis a software application used by developers, system administrators and others to compare, merge, and synchronize data. It runs on Windows, macOS, and Linux. https://www.scootersoftware.com/ --> to compare your project with their project. hint: checkout a specific version and keep that as reference. tinker with the rules, eg. ignore different timestamps, or ignore whitespaces Source Treea version control for git, very user friendly https://www.sourcetreeapp.com/ Hint: add two origins, your origin (your git) and their origin, merge by retaining the full history GitKrakenGitKraken's merge conflict tool helps resolve conflicts right in-app in a specialised view that saves you tons of time. https://www.gitkraken.com/learn/git/tutorials/how-to-resolve-merge-conflict-in-git
|
Beta Was this translation helpful? Give feedback.
-
New Blog Post (German): Angular 20 ist da! |
Beta Was this translation helpful? Give feedback.
Uh oh!
There was an error while loading. Please reload this page.
-
Welcome! 🎉 Here, we can share links and code snippets throughout the workshop.
Beta Was this translation helpful? Give feedback.
All reactions