Для прокрутки страницы вверх до закрытия Material Dialog в Angular есть несколько подходов. Рассмотрим два основных.
1. Использование метода scrollTop() в JavaScript:
1. Создайте сервис ScrollService с методом, который будет вызывать метод scrollTop() для элемента html или body и перемещать страницу вверх.
// scroll.service.ts import { Injectable } from '@angular/core'; @Injectable({ providedIn: 'root' }) export class ScrollService { scrollToTop(): void { const element = document.documentElement.scrollTop ? document.documentElement : document.body; element.scrollTop = 0; } }
2. В вашем компоненте Material Dialog (например, DialogComponent), внедрите сервис ScrollService и вызовите его метод scrollToTop() при закрытии диалога.
// dialog.component.ts import { Component } from '@angular/core'; import { MatDialogRef } from '@angular/material/dialog'; import { ScrollService } from 'path/to/scroll.service'; @Component({ templateUrl: 'dialog.component.html' }) export class DialogComponent { constructor( private scrollService: ScrollService, private dialogRef: MatDialogRef<DialogComponent> ) { } closeDialog(): void { this.scrollService.scrollToTop(); this.dialogRef.close(); } }
2. Использование Router Events:
1. В вашем компоненте, который содержит Material Dialog (например, AppComponent), внедрите сервис Router.
// app.component.ts import { Component } from '@angular/core'; import { Router, NavigationEnd } from '@angular/router'; import { MatDialog } from '@angular/material/dialog'; @Component({ templateUrl: 'app.component.html' }) export class AppComponent { constructor( private router: Router, private dialog: MatDialog ) { this.router.events.subscribe(event => { if (event instanceof NavigationEnd) { this.dialog.closeAll(); } }); } }
В этом примере мы подписываемся на событие NavigationEnd и вызываем метод closeAll() сервиса MatDialog при каждом переходе на новый маршрут, что позволяет закрыть все открытые диалоги до перехода.
Обратите внимание, что данный подход может быть несколько грубым и закрывать все диалоги, даже если вы хотите закрыть только один. В таком случае вы можете использовать дополнительные флаги и условия для определения, какой диалог вы хотите закрыть.