The release candidate for Angular 8 is finally here, after a bunch of beta releases we now have the last and final beta Angular 8.
The release candidate brings along a bunch of improvements and enhanced router capabilities.
Here’s what’s new with the Angular 8 release candidate:
- An API to retrieve the value of history.state, useful in providing a backward-compatible Location service that can emulate the AngularJS $location service, since it will be necessary to read the state date in order to produce AngularJS location transition events. The feature also will be useful to any application that wants to access state data through Angular instead of going directly to DOM APIs.
- DOCUMENT is no longer a token exported from @angular/platform-browser. It is now exported only from @angular/common.
- Attributes for aria-* are treated as safe HTML and are not being stripped by the HTML sanitizer. Previously, aria attributes were stripped by the HTML sanitizer as unsafe.
- Support for skipping leading trivia in the lexer. Leading trivia, such as whitespace or comments, is confusing for developers looking at source-mapped templates.
- A number of bug fixes for the Bazel build tool as well as a bug fix for the compiler, which addresses a crash due to isSkipSelf of null.
You can download the Angular 8 release candidate here.
Here’s everything new in Angular 8 including the beta releases so far:
- Logging has been made more configurable in the compiler-cli, with CLI usage and integrations such as webpack plug-ins to filter excessive log messages.
- An AbstractType<T> interface will match classes whether they are abstract or concrete. Casting as AbstractType<MyConcrete> will return a type that is not newable. This type will be used to match abstract classes in the get() functions of Injector and TestBed.
- An update schematic called “template-var-assignment” is introduced to analyze template files to warn developers if template variables are assigned to values. The schematic comes with a driver for TSLint.
- For service-worker, multiple apps can be supported on different subpaths of a domain. Until now, the service-worker has cached data of multiple apps in cache DB files in a different domain. This has made apps break when switching from one app to another in the same domain. The new capability solves this issue.
- Support for TypeScript 3.3. Support for TypeScript 3.1 and TypeScript 3.2 will be dropped.
- The addition of a command-line flag to expose Bazel build files on disk.
- Modification of Bazel to copy the workspace and bazel files to the project root directory before invoking Bazel.
- Removal of components from a FormaArray. This provides a convenience. Previously, FormArray had to be looped, removing each component until empty.
- Providing external tooling the ability for async providers to finish resolving before the document is serialized.
- An update schematic for the @angular/core package to migrate to the explicit query timing syntax. This affects ViewChild and ContentChild query resolution. While not yet required, queries with Ivy will be dynamic by default. So, specifying an explicit query timing ensures that developers can migrate smoothly to Ivy, once Ivy is the default renderer.
- A JSON schema for service worker configuration.
- For Bazel, ts_config has been added to extend support for the ng_module. This also is a step toward enabling the importing of material2 as a Bazel dependency.
- For the router, a hash-based navigation option has been added to setUpLocationSync. With this change, developers now can pass an option to setUpLocationSync to ensure that location changes run in hash-based apps.
- In the Angular core, users now can define timing of ViewChild/ContentChild queries. Previously, an inconsistency in resolution timing could cause confusion and code depending on a query result could stop working.
- In the compiler, support has been added for tokenizing a subset of an input string and tokenizing escape strings.
- The compiler-cli no longer supports external symbols by default.
- With SASS backing for Bazel, rules are added to the workspace for a project requiring the SASS extension to CSS. With SASS, developers can write visual styles for a website in a more advanced language that is compiled to CSS.
- A performance improvement for smaller images that uses pngcrsh, an optimizer that makes images smaller for all PNG files.
- createinjector() is removed from the pubic API. Createinjector() is an API for the planned Ivy renderer, which is due in a beta form later this year. Plans call for re-exporting the API when Ivy is released
- Consistency of typeof checks, in which the sequence of strictly not equal to null followed by typeof value == ‘object’ is used when testing whether value is an object. This is being done because there is no point to using double equal with null because undefined is ruled out by the typeof check. The improvement also would avoid an unnecessary ToBoolean check.
- The TypeScript compiler transformer, ngtsc, is exposed as a plug-in, enabling wiring of ngtsc into an existing TypeScript compilation binary.
- For the compiler-cli, generated SASS/Less (Leaner Style Sheets) files are resolved to .css inputs.
- For forms, a control and descendant controls can be marked as touched.
- Also for Bazel, a bug fix has been implemented in which the node memory limit for ng-module has been increased to prevent out-of-memory issues with large modules. When memory is not released correctly or a process continues to use more and more of it, process failure can result.
- To improve performance for @angular/platform-server, Angular 8.0 uses a shared DomElementSchemaRegistry instance. This addresses a problem in which ServerRendererFactory2 creates a new instance of DomElementSchemaRegistry for every request, which is very costly. Reusing a single instance avoids overhead per request.
- Also for forms, Angular 8.0 exports NumberValueAccessor and RangeValueAccessor directives.
- Improved performance for @angular/platform-server by using a shared DomElementSchemaRegistry instance. This is a fix to the issues where ServerRendererFactory2 creates a new instance of DomElementSchemaRegistry for every request, reusing a single instance avoids overhead costs per request.
- For forms, Angular 8.0 exports NumberValueAccessor and RangeValueAccessor directives.
- Angular 8 beta also includes bug fixes for the Bazel build tool, such as the one in which a project created by the schematics would not be compiled if the project contained a routing module.