This is a cool feature in Angular 8, the support of animations. First off, we define our animation in a Typescript file like for example a sliding in translation of the X-axis.
app-animation.ts
import { trigger, animate, transition, style, group, query } from '@angular/animations';
export const slideInAnimation = trigger('slideInAnimation', [
// Transition between any two states
transition('* <=> *', [
// Events to apply
// Defined style and animation function to apply
// Config object with optional set to true to handle when element not yet added to the DOM
query(':enter, :leave', style({ position: 'fixed', width: '100%', zIndex: 2 }), { optional: true }),
// group block executes in parallel
group([
query(':enter', [
style({ transform: 'translateX(100%)' }),
animate('0.5s ease-out', style({ transform: 'translateX(0%)' }))
], { optional: true }),
query(':leave', [
style({ transform: 'translateX(0%)' }),
animate('0.5s ease-out', style({ transform: 'translateX(-100%)' }))
], { optional: true })
])
])
]);
In our app.component.ts, we import this animation slideInAnimation like this:
import { slideInAnimation } from './app.animation';
@Component({
selector: 'pm-root',
templateUrl: './app.component.html',
styleUrls: ['./app.component.css'],
animations: [ slideInAnimation ]
})
export class AppComponent {
pageTitle = 'SomeAcme Product Management';
Note the association of the
slideInAnimation above.
And in the app component template (app.component.html) we just declare a template variable for the router outlet and set it up to trigger on route activation.
<div class="container" [@slideInAnimation]="o.isActivated ? o.activatedRoute: ''">
<router-outlet #o="outlet"></router-outlet>
</div>
This video shows the effect. Note that this is an excerpt from Deborah Kurata's course on Angular routing from Pluralsight.
Video of this technique:
Share this article on LinkedIn.
No comments:
Post a Comment