Changelog of Become a Ninja with Angular

Here is the full changelog of the ebook Become a Ninja with Angular, release per release, chapter per chapter.

You can download the latest version (these updates are free to any buyer!).

Currently supported versions

Changes in ebook

Building components and directives: Add a section about afterRender and afterNextRender.
Performances: Refresh the performances chapter regarding the control flow syntax, signals, and the experimental zoneless detection
Performances: Mention the --ssr option of the CLI for Server Side Rendering.
Forms: Mention the events observable on FormControl, introduced in Angular v18.
Building components and directives: Add a section about fallback content for ng-content, as introduced in Angular v18.
Send and receive data with Http: Mention that HttpClientModule is deprecated in Angular v18.
The templating syntax: The chapter now introduces @if/@for/@switch from the control flow syntax as the recommended way to write templates. We kept a section about *ngIf/*ngFor/*ngSwitch as they are not deprecated and can still be used. All template examples across the ebook now use the control flow syntax.
Internationalization: Add a section about i18n with Transloco and new exercice to go along with it!
Signals: Add a section about the output() function introduced in v17.3
Advanced observables: Add a section about using subjects as triggers.
Signals: Add a section about the model() function introduced in v17.2
Signals: Add a section about the queries as signals functions (viewChild()/viewChildren()/contentChild()/contentChildren()) introduced in v17.2
Deferred loading with `@defer`: The defer block fixture default behavior switched to Playthrough.
Signals: Add a section about input as signals, as introduced in v17.1
Signals: Mention the new Signals exercise added to the Pro Pack!
Signals: Add a section about how to handle nullable values in signals.
Styling components and encapsulation: We now use styleUrl when possible, as introduced in Angular v17.
Deferred loading with `@defer`: New chapter about deferred loading with @defer as introduced in Angular v17!
Signals: Remove the mutate method from examples,a s it has been remove in Angular v17.
Control flow syntax: New chapter about the control flow syntax introduced in Angular v17!
Building components and directives: Add a section about the transform option of @Input, introduced in Angular v16.1.
Signals: New chapter about Signals!
Building components and directives: Introduce required inputs, as added in Angular v16
Router: Add a section about withComponentInputBinding to get router parameters and data as component inputs, as introduced in Angular v16
Advanced observables: Use the takeUntilDestroyed RxJS operator introduced in Angular v16
Router: As Angular v15.2 deprecates class-based resolvers and guards, we now use functional resolvers and guards in all examples.
Router: Remove the section about the CanLoad guard as it is now deprecated (use CanMatch instead).
Going to production: Explains how to use ng generate environments.
Dependency Injection: Use a better example for DI configuration, with a logging service that logs to the console in development and calls an API in production.
Dependency Injection: Add a section about the inject() function.
Standalone components: Add a section about HTTP with provideHttpClient and functional interceptors.
Dependency Injection: Remove the providedIn: NgModule syntax now that it is deprecated in Angular v15
Router: The router automatically unwraps default module exports in lazy-loading routes in Angular v15
Standalone components: Use the NgFor alias introduced in Angular v15 for the NgForOf directive
Standalone components: The router now automatically unwraps default component exports in lazy-loading routes
Going to production: Replace the explanation of enableProdMode by a section about production mode and mention the ngDevMode variable.
Going to production: We now explain how to use fileReplacements as it is no longer included by default in CLI v15.
Router: Showcases an example of a functional resolver
Router: Showcases an example of functional guard
Standalone components: Mention provideRouter(routes)
Performances: Mention the experimental NgOptimizedImage directive introduced in v14.2
Router: Add a section on the new CanMatch guard introduced in v14.1
Forms: Add a section about FormArray and FormRecord
Forms: Add a section about typed forms
Forms: We nows use and explain the new "strictly typed forms API" πŸš€
Standalone components: New chapter about standalone APIs!
Performances: Better example of NgZone.runOutsideAngular usage
Going to production: Section about the new extendedDiagnostics option introduced in v13.2
Advanced components and directives: The advanced components chapter has a new section about ng-template, explaining how to create customizable components using conditional, contextual content projection
Forms: The forms chapter has a new section about control value accessors, explaining how to create custom form controls
The templating syntax: Remove the canonical bind-, on-, ref- syntax that has been deprecated in Angular v13
Going to production: Remove the section about differential loading as it has been removed in Angular v13
Going to production: Remove the fullTemplateTypeCheck explanation, as it is deprecated in Angular v13, and only keep its remplacement strictTemplates.
Reactive Programming: RxJS v7.2 allows to import operators directly from rxjs, so all imports have been simplified.
Global: Add links to our quizzes!
Global: All examples now use strict null checks.
From zero to something: The ebook now uses ESLint as its linter.
Testing your app: The e2e tests section now introduces Cypress
Send and receive data with Http: Section about the new HttpContext introduced in Angular v12.
Send and receive data with Http: The HTTP examples now use the human-readable HttpStatusCode enum.
Going to production: The CLI uses the production configuration by default for ng build since v12, and the --prod flag is deprecated.
Internationalization: ng xi18n has been renamed ng extract-i18n in CLI v11
Internationalization: xi18N now extracts messages from the $localize calls in TypeScript code
Testing your app: async has been deprecated and renamed waitForAsync
Internationalization: Import the global variants of the locale data. It's simpler, supports all formatting options, and doesn't trigger an optimization bailout warning when building the app with the CLI.
Global: Bump to ng 10.0.0
The wonderful world of Web Components: Use customElements.define instead of the deprecated document.registerElement.
Reactive Programming: Pass an object as argument to the Observable.subscribe() method when an error or a completion must be handled, instead of 2 or 3 functions, because passing several functions will be deprecated in RxJS 7.
Global: Bump to ng 9.1.0
From zero to something: Bump to cli 9.1.0
Global: Bump to ng 9.0.0
From zero to something: Bump to cli 9.0.1
Internationalization: Explains how to configure the default currency code
Internationalization: Introduce @angular/localize usage in ng 9.0.0
Going to production: Mention the multiple configurations support introduced in CLI v9.0
Going to production: Explain the fullTemplateTypeCheck and strictTemplates options
Global: Bump to ng 9.0.0-next.5
From zero to something: Bump to cli 9.0.0-next.3
Testing your app: Use TestBed.inject instead of the deprecated TestBed.get in ng 9.0.0
From zero to something: Bump to cli 8.3.2
From zero to something: Bump to cli 8.3.0
Diving into TypeScript: Showcase interface usage for modeling entities
Diving into TypeScript: Improve the enum section with examples of how to use union types
Advanced TypeScript: Introduce a new chapter about advanced TypeScript patterns, like keyof, mapped types, type guards, and other things!
A gentle introduction to ECMAScript 2015+: Add a section about tagged template strings.
Global: Bump to ng 8.2.0
From zero to something: Bump to cli 8.2.0
Testing your app: Use a more strictly typed createSpyObj syntax.
Global: Bump to ng 8.1.0
From zero to something: Bump to cli 8.1.0
The wonderful world of Web Components: Mention more recent alternatives to Polymer, remove the dead HTML import spec and mention Angular Elements
Global: Bump to ng 8.0.0
From zero to something: Bump to cli 8.0.0
Advanced components and directives: Add and explain the static flag for ViewChild and ContentChild introduced by Angular 8.0.0
Testing your app: Showcase the awesome ngx-speculoos library for cleaner unit tests
Router: Use import for lazy-loading routes as introduced by ng 8.0.0
Angular compiler: Update the AoT explanation and generated code for Angular 8.0.0 (Ivy)
Going to production: Differential loading using browserslist as introduced by the cli 8.0.0.
A gentle introduction to ECMAScript 2015+: How to use async/await with promises
Forms: Showcase the awesome ngx-valdemort library for better validation error messages
From zero to something: Bump cli to 7.3.0
From zero to something: Bump to cli 7.2.0
Global: Bump to ng 7.2.0
From zero to something: Bump to cli 7.2.0-rc.0
From zero to something: Bump to cli 7.2.0-beta.2
Global: Bump to ng 7.2.0-rc.0
Global: Bump to ng 7.2.0-beta.2
From zero to something: Bump to cli 7.1.0
Global: Bump to ng 7.1.0
Router: Use UrlTree in CanActivate guard, as introduced by 7.1
Global: Bump to ng 7.1.0-rc.0
Global: Bump to ng 7.0.2
From zero to something: Bump to cli 7.0.4
Going to production: Adds a new chapter about Going to production!
From zero to something: Bump to cli 7.0.2
Global: Bump to ng 7.0.0
Global: Bump to ng 7.0.0-rc.1
Global: Bump to ng 7.0.0-rc.0
Global: Bump to ng 7.0.0-beta.6
Global: Bump to ng 7.0.0-beta.4
Global: Bump to ng 7.0.0-beta.0
From zero to something: Bump to cli 7.0.1
From zero to something: Bump to cli 6.2.1
From zero to something: Bump to cli 6.2.0-rc.0
Performances: Adds a performances chapter!
Global: Bump to ng 6.1.0
Global: Bump to ng 6.1.0-rx.0
Global: Bump to ng 6.1.0-beta.1
From zero to something: Bump to cli 6.1.0
Pipes: Add the keyvalue pipe introduced in Angular 6.1
Styling components and encapsulation: New ShadowDom encapsulation option with Shadow DOM v1 support (the old and soon deprecated Native option uses Shadow DOM v0)
Router: Adds the Scroll event and scrollPositionRestoration option introduced in 6.1
Advanced observables: Use shareReplay instead of publishReplay and refCount
Global: Bump to ng 6.0.7
From zero to something: Bump to cli 6.0.8
Send and receive data with Http: HTTP tests now use verify every time
Pipes: Show usage of formatting functions available since Angular 6.0
From zero to something: Bump cli to 6.0.7
Internationalization: Update for CLI 6.0 and use a dedicated configuration
Global: Bump to ng 6.0.0
From zero to something: Bump to cli 6.0.0
Dependency Injection: Use providedIn to register services, as recommended for Angular 6.0
Services: Use providedIn to register the service, as recommended for Angular 6.0
Testing your app: Simplify service unit tests now that they use providedIn from ng 6.0
Global: Bump to ng 6.0.0-rc.4
Global: Bump to ng 6.0.0-rc0
Global: Bump to ng 6.0.0-beta.7
Global: Bump to ng 6.0.0-beta.6
Global: Bump to ng 6.0.0-beta.1
Advanced components and directives: Angular 6.0+ allows to type ElementRef
Advanced observables: We now use the imports introduced in RxJS 6.0 (import { Observable, of } from 'rxjs')
From zero to something: The chapter now uses Angular CLI from the start!
Dependency Injection: Updates the dependency injection via token section with a better example
Reactive Programming: We now use the pipeable operators introduced in RxJS 5.5
Advanced observables: We now use the pipeable operators introduced with RxJS 5.5
The wonderful world of Web Components: Replace by
Global: Bump to ng 5.2.0
Building components and directives: Better lifecycle explanation
Forms: Reintroduce the min and max validators from version 4.2.0, even if they are not available as directives.
Send and receive data with Http: Remove remaining mentions to the deprecated HttpModule and Http
Global: Bump to ng 5.1.0
Global: Bump to ng 5.0.0
Global: Bump to ng 5.0.0-rc.5
Global: Bump to ng 5.0.0-rc.3
Global: Bump to ng 5.0.0-rc.2
Global: Bump to ng 5.0.0-rc.0
Global: Bump to ng 5.0.0-beta.6
Global: Bump to ng 5.0.0-beta.5
Global: Bump to ng 5.0.0-beta.4
Global: Bump to ng 5.0.0-beta.1
Pipes: Use the new i18n pipes introduced in ng 5.0.0
Forms: Add a section on the updateOn: 'blur' option for controls and groups introduced in 5.0
Send and receive data with Http: Use object literals for headers and params for the new http client, introduced in 5.0.0
Router: Adds ng 5.0 ChildActivationStart/ChildActivationEnd to the router events
Internationalization: Remove deprecated i18n comment with ng 5.0.0
Internationalization: Show how to load the locale data as required in ng 5.0.0 and uses the new i18n pipes
Internationalization: Placeholders now displays the interpolation in translation files to help translators
Global: Bump to ng 4.4.1
Forms: Remove the section about combining template-based and code-based approaches
Global: Bump to ng 4.3.0
Send and receive data with Http: Updates the chapter to use the new HttpClientModule introduced in ng 4.3.0.
Router: List the new router events introduced in 4.3.0
Advanced components and directives: Add a section about HostBinding
Advanced components and directives: Add a section about HostListener
Advanced components and directives: New chapter on advanced components, with ViewChild, ContentChild and ng-content!
Global: Bump to ng 4.2.3
Forms: Remove min/max validators mention, as they have been removed temporarily in ng 4.2.3
Global: Bump to ng 4.2.0
Forms: Introduce the min and max validators from version 4.2.0
Angular compiler: Adds a chapter about the Angular compiler and the differences between JiT and AoT.
Global: Bump to ng 4.1.0
Router: New chapter on advanced router usage: protected routes with guards, nested routes, resolvers and lazy-loading!
Global: πŸŽ‰ Bump to stable release 4.0.0 πŸŽ‰
Global: Bump to 4.0.0-rc.6
Global: Bump to 4.0.0-rc.5
Global: Bump to 4.0.0-rc.4
Global: Bump to 4.0.0-rc.3
Global: Bump to 4.0.0-rc.1
Global: Bump to 4.0.0-beta.8
Global: Bump to ng 4.0.0-beta.7 and TS 2.1+ is now required
Global: Bump to 4.0.0-beta.5
Global: Bump to 4.0.0-beta.0
The templating syntax: Use as, introduced in 4.0.0, instead of let for variables in templates
The templating syntax: The template tag is now deprecated in favor of ng-template in 4.0
The templating syntax: Introduces the else syntax from version 4.0.0
Pipes: Introduce the as syntax to store a NgIf or NgFor result, which can be useful with some pipes like slice or async.
Pipes: Adds titlecase pipe introduced in 4.0.0
Services: New Meta service in 4.0.0 to get/set meta tags
Testing your app: overrideTemplate has been added in 4.0.0
Forms: Introduce the email validator from version 4.0.0
Send and receive data with Http: Use params instead of the deprecated search in 4.0.0
Router: Use paramMap introduced in 4.0 instead of params
Advanced observables: Shows the as syntax introduced in 4.0.0 as an alternative for the mulitple async pipe subscriptions problem
Internationalization: Add a new chapter on internationalization (i18n)
Global: Each chapter now has a link to the corresponding exercise of our Pro Pack Chapters are slightly re-ordered to match the exercises order.
Dependency Injection: Fix the Babel 6 config for dependency injection without TypeScript
Global: Bump to 2.4.4
Global: The big rename: "Angular 2" is now known as "Angular"
Forms: Fix the NgModel explanation
Global: Bump to 2.4.0
Forms: Validators.compose() is no longer necessary, we can apply several validators by just passing an array.
Global: Bump to 2.2.0
Forms: Add an async validator example
Forms: Remove the useless (2.2+) .control in templates like username.control.hasError('required').
Router: routerLinkActive can be exported (2.2+).
Advanced observables: New chapter on Advanced Observables!
Global: Bump to 2.1.0
Global: Remove typings and use npm install @types/...
Router: We don't need to unsubscribe from the router params in the ngOnDestroy method.
Global: Use const instead of let and TypeScript type inference whenever possible
Testing your app: Use TestBed.get instead of inject in tests
Global: Bump to 2.0.1
Global: πŸŽ‰ Bump to stable release 2.0.0 πŸŽ‰
Global: Bump to rc.7
Global: Bump to rc.6
From zero to something: Update the SystemJS config for rc.6 and bump the RxJS version
Pipes: Remove the section about the replace pipe, removed in rc.6
Global: Bump to rc.5
Forms: Forms now use the new form API (FormsModule and ReactiveFormsModule).
Services: Add the service to the module's providers
Send and receive data with Http: Add the HttpModule import
Router: Introduce RouterModule
Dependency Injection: Introduce modules and their role in DI. Changed the example to use a custom service instead of Http.
Testing your app: Tests now use the TestBed API instead of the deprecated TestComponentBuilder one.
From zero to something: Small introduction to NgModule when you start your app from scratch
Changelog: Mention free updates and web page for obtaining latest version
Global: Bump to rc.4
Testing your app: Angular 2 does not provide Jasmine wrappers and custom matchers for unit tests in rc.4 anymore
Router: Update the router to the API v3!
Global: Bump to rc.3
Global: Bump to rc.2
The templating syntax: Replace the deprecated ngSwitchWhen with ngSwitchCase
Pipes: Date pipe is now fixed in rc.2, no more problem with Intl API
Forms: Warn about forms module being rewritten (and deprecated)
Send and receive data with Http: now autodetects the body type, removing the need of using JSON.stringify and setting the ContentType
Router: Warn about router module being rewritten (and deprecated)
Dependency Injection: Remove deprecated provide() method and use {provide: ...} instead
Global: Bump to rc.1
Global: Code examples now follow the official style guide
Styling components and encapsulation: New chapter on styling components and the different encapsulation strategies!
Router: Introduce the new router (previous one is deprecated), and how to use parameters in URLs!
Global: Bump to rc.0. All packages have changed!
Global: Bump to beta.17
Testing your app: injectAsync is now deprecated and replaced by async
Zones and the Angular magic: New chapter! Let's talk about how Angular 2 works under the hood! First part is about how AngularJS 1.x used to work, and then we'll see how Angular 2 differs, and uses a new concept called zones.
Global: Bump to beta.15
The templating syntax: *ngFor now also exports a first variable
Pipes: A replace pipe has been introduced
Forms: A pattern validator has been introduced to make sure that the input matches a regexp
Global: Bump to beta.14
Global: Bump to beta.11
Global: Bump to beta.9
Global: Bump to beta.8
Global: Bump to beta.7
Global: Display the Angular 2 version used in the intro and in the chapter "Zero to something".
Global: Bump to beta.6 (beta.4 and beta.5 were broken)
Global: Bump to beta.3
Global: Bump to beta.2
Diving into TypeScript: Use typings instead of tsd.
Dependency Injection: Better explanation of hierarchical injectors
Reactive Programming: Observables are not scheduled for ES7 anymore
Building components and directives: Explain how to remove the compilation warning when using @Input and a setter at the same time
Building components and directives: Add an explanation on isFirstChange for ngOnChanges
Testing your app: Add an example on how to test an event emitter
Forms: Add a mnemonic tip to rememeber the [()] syntax: the banana box!
Forms: Examples use to have a relative templateUrl
Forms: Fix error ng-no-form -> ngNoForm
Forms: Fix errors (ngModel) -> (ngModelChange), is-old-enough -> isOldEnough
Send and receive data with Http: Use JSON.stringify before sending data with a POST
Send and receive data with Http: Add a mention to JSONP_PROVIDERS
Router: RouterOutlet inserts the template of the component just after itself and not inside itself
Global: First public release of the ebook!

You can download the latest version (these updates are free to any buyer!).

Back to ebook details.