Migrating to Aurelia 2
Aurelia 2 is a complete rewrite of Aurelia that shares many of the same loved and familiar features of Aurelia 1. Understandably, in the spirit of progress, not everything is the same. In this section, we are going to guide you through what has changed and how you can migrate over your Aurelia 1 applications to Aurelia 2.
COMPAT PACKAGE
An quickest way to get an application in v1 up an running in v2 is to include the compat package. It can be done via 2 steps:
installing the compat package via
include the compat package into your app:
BREAKING CHANGES
Event
In v2, preventDefault
is no longer called by default. This breaking change could show up in unexpected places:
click events: in v1, clicking on a button inside a form will not submit the form, while it will in v2, as the click event default behavior is no longer prevented
Even though clicking default behavior is not prevented, form submission without an action will not reload the page as this default behavior is still prevented in v2, so you don't need to add
:prevent
to every buttonclick
, or formsubmit
listener.drag events: in v1, implementing drag/drop will have
preventDefault
called automatically, but in v2, they will need to be explicitly called by the application
Sometimes, if it's desirable to call preventDefault
in an event binding, use prevent
modifier, like the following example:
Read more about modifiers in event modifier doc here
Scope selection
In v2, when trying to bind with a non-existent property, the closest boundary scope (scope of the owning custom element) will be selected, instead of the immediate scope of the binding (v1 behavior).
Internal binding property observeProperty
has been renamed to observe
observeProperty
has been renamed to observe
In v1, if you happen to use .observeProperty
method from bindings in your application/library, then change it to observe
instead. The parameters of the signature remain the same.
Internal binding property sourceExpression
has been renamed to ast
sourceExpression
has been renamed to ast
In v1, if you happen to use .sourceExpression
property from bindings in your application/library, then change it to ast
instead. The type of the property remains the same.
Enhance API changes:
In v1, enhance
method on an Aurelia
instance has the signature:
In v2, enhance
method on an Aurelia
instance has the signature:
Parent container and resources can be specified through this config.
View model ref binding (view-model.ref="...")
In v2, in order to get a reference to the underlying component view model, use component.ref
instead of view-model.ref This is to make terminologies consistent as we are moving towards component oriented terms.
If attribute (if.bind="...")
The primary property of
If
has been renamed fromcondition
tovalue
. If you are usingif.bind
, you are not affected. If you are using the multi prop binding syntax, the template looks like this:
Change it to:
Binding Engine
BindingEngine
has been removed in v2, but can still be imported from@aurelia/compat-v1
package for ease of migration. ThecollectionObserver
method on the compat package ofBindingEngine
is not the same with v1, per the follow comparison: v2v1
Binding commands
.delegate
command has been removed, use.trigger
instead. With shadow DOM, even though.delegate
works, it doesn't feel as natural as.trigger
, and the performance benefits.delegate
command used to give when browsers were slow adding many event listeners is no longer as big..call
command has been removed, use lambda functions instead to create function that preserves thethis
context. Refer to lambda expression
Compose
<compose>
has been renamed to<au-compose>
. The bindable properties of this component have also been changed:viewModel -> component
view -> template
model remains the same
Examples migration fix:
In Aurelia 2, all bindings are passed through to the underlying custom element composition, so
component.ref
(view-model.ref
in v1) no longer means getting a reference to the composer, but the composed view model instead.
Read more about dynamic composition in v2 in this dynamic composition doc and dynamic ui composition doc.
Replaceable & replaceable part
If you are using replaceable
/part
/repaceable-part
combo in your v1 applications, you'll need to replace them with <au-slot>
elements and au-slot
attributes. Refer to the au slot doc for more information.
General changes
Custom attributes are no longer considered to have a binding to the primary bindable when their template usage is with an empty string, like the following examples:
Both of the above usages will be considered as "plain" usage, to avoid overriding the defaul value in the custom attribute component instance.
Templates no longer need to have
<template>
tags as the start and ending tags. Templates can be pure HTML with enhanced Aurelia markup but<template>
doesn't need to be explicitly defined.PLATFORM.moduleName
is gone. This was to address a limitation in Aurelia 1. Aurelia 2 now works well with all bundlers and does not require the addition of this code to use code splitting or tell the bundler where template code is.Better intellisense support for TypeScript applications. Using the new injection interfaces, you can now inject strongly typed Aurelia packages such as Fetch Client, Router or Internationalization. These packages are prefixed with an "I" such as
IHttpClient
,IRouter
and so on.empty binding expressions are automatically inferred based on the target of the binding, like the following example:
means:
This is automatically applied to
.bind
/.one-time
/.to-view
/.from-view
/.two-way
/.attr
binding commands.
Plugins:
Web-Components plugin
Remove automatic
au-
prefixRemove auto-conversion of Aurelia element -> WC element. Applications need to explicitly define this. This should make mix-matching & controlling things easier.
Last updated