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

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.