What do you want from this newsletter in 2025?

There are only a month and a few days left in 2024, and my goal is to keep publishing weekly updates until the end of the year. By the time you read this, it will be Thanksgiving in the United States, a time of the year when we are thankful and spend time with our families.

First, I want to thank you for reading this newsletter; I hope you find it useful. It certainly has become quite a database of resources for me, at the very least, and I use these posts all the time when training and mentoring people.

Now, I’d like to know what you think of the new format I have used a few times lately (example here) compared to the “old” format (example here). What I like about the new format is that I suggest essential topics to revisit rather than covering just new features and tutorials on specific topics. It’s more broad as a result, and there are probably more interesting topics every week.

In any case, if you’re thankful for this newsletter or have any feedback or ideas to share, let me know. I read and respond to every email.

Happy Thanksgiving if that’s something you’re celebrating, and since Thanksgiving is followed by Black Friday, you can get up to 54% off any certification and training package at certificates.dev!

What’s new with Signals in Angular 19?

Angular 19 is now available with many different updates. A video recap (23 minutes long) of all these features is available on YouTube.

There is a lot to unpack, so this week, my focus is on all signal-related updates.

First, signal-based input, output, and view query functions are all stable APIs as of v19, which means you can use all of them safely. Here is the complete list of such stable features:

input()output()model()viewChild()viewChildren()contentChild(), contentChildren()takeUntilDestroyed()outputFromObservable(), and outputToObservable() 

Yes, that’s a lot!

Second, to help you migrate your old @Input() and @ViewChild()to their signal-based equivalents, new Angular CLI migration commands are available:

ng generate @angular/core:signal-input-migration
ng generate @angular/core:signal-queries-migration
ng generate @angular/core:output-migration

Initial feedback from these automated migrations is very positive.

The third update, a new type of Signal (in developer preview) called linkedSignal. This new function also creates a computed signal that can be written manually. In other words, a computed signal is read-only, whereas a linkedSignal is writable while preserving automatic update and computation features of a computed signal.

The final and most significant update is the addition of a resource API to Angular. This is a big one for several reasons: It enables total signal-based reactivity while using Promises or RxJs to fetch updates.

Here is a code example:

sortOrder = signal<'asc' | 'desc'>('asc');
usersResource = rxResource({
request: () => ({ sort: this.sortOrder() }),
loader: ({ request }) => this.http.get('/users', { params: { sort: request.sort } })
});

The above code will send a request to /users with the proper sort parameter every time the sortOrder() signal value changes. The result is an object with lots of information about the resource:

The approach is similar to ngx-signalify or TanStack Query, and it looks promising. Now, resource is in an experimental state, which means “do not use it in production yet” (the API will likely change), but you can learn more about it here. Because there’s so much more to it, I’ll write a dedicated post and/or do a long-form video workshop on that topic.

And that’s it for the four main updates regarding Signals in v19. I could add a fifth one with the effect() function still in developer preview but now allows writing other signals by default (no more need to add the option to perform such writes).

Angular 19 released next week!

This week, we get back to the new format of the newsletter. I’m posting a few essential articles to revisit, updates to know about, and one question to ponder:

Three short articles to revisit:

  • If you subscribe to Observables within another subscription, you’ll want to read this as it’s an anti-pattern. The solution is to use the switchMap operator or another equivalent, such as mergeMap.

Two Angular updates:

One question to think about:

Do your prefer Template driven forms or reactive? What about none of that? Have you ever considered that option?