Ответ 1
Здесь есть анимация, в которой вы можете видеть вид, сдвинутый влево и вправо, когда вы идете вперед и направо налево, когда идете назад, не добавляя анимацию к компонентам отдельно.
import {animate, AnimationMetadata, group, query, style, transition, trigger} from '@angular/animations';
const leftToRight: AnimationMetadata[] = [
/* order */
/* 1 */ query(':enter, :leave', style({position: 'fixed', width: '100%'})
, {optional: true}),
/* 2 */ group([ // block executes in parallel
query(':enter', [
style({transform: 'translateX(100%)'}),
animate('0.5s ease-in-out', style({transform: 'translateX(0%)'}))
], {optional: true}),
query(':leave', [
style({transform: 'translateX(0%)'}),
animate('0.5s ease-in-out', style({transform: 'translateX(-100%)'}))
], {optional: true}),
])
];
const rightToLeft: AnimationMetadata[] = [
/* order */
/* 1 */ query(':enter, :leave', style({position: 'fixed', width: '100%'})
, {optional: true}),
/* 2 */ group([ // block executes in parallel
query(':enter', [
style({transform: 'translateX(-100%)'}),
animate('0.5s ease-in-out', style({transform: 'translateX(0%)'}))
], {optional: true}),
query(':leave', [
style({transform: 'translateX(0%)'}),
animate('0.5s ease-in-out', style({transform: 'translateX(100%)'}))
], {optional: true}),
])
];
export const routerTransition = trigger('routerTransition', [
transition('first_page => second_page', leftToRight),
transition('second_page => first_page ', rightToLeft),
transition('second_page => third_page', leftToRight),
transition('third_page => second_page', rightToLeft),
]);
И импортируйте его в свой AppComponent и добавьте функцию, чтобы вернуть состояние маршрута. Не забывайте стили, которые я применил.
import {routerTransition} from "./router.animations";
@Component({
selector: 'app-root',
templateUrl: './app.component.html',
styles: ['
/deep/ router-outlet ~ * {
position: absolute;
width: 100%;
}
'],
animations: [routerTransition]
})
export class AppComponent implements {
getState(outlet) {
return outlet.activatedRouteData.state;
}
onDeactivate() {
// document.body.scrollTop = 0;
// Alternatively, you can scroll to top by using this other call:
window.scrollTo(0, 0);
}
}
Применить его к основному тегу в качестве директивы
<main [@routerTransition]="getState(o)">
<router-outlet #o="outlet" (deactivate)="onDeactivate()"></router-outlet>
</main>