Как прокрутить страницу вверх до закрытия material dialog или закрыть dialog до перехода на другой route?

Для прокрутки страницы вверх до закрытия 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 при каждом переходе на новый маршрут, что позволяет закрыть все открытые диалоги до перехода.

Обратите внимание, что данный подход может быть несколько грубым и закрывать все диалоги, даже если вы хотите закрыть только один. В таком случае вы можете использовать дополнительные флаги и условия для определения, какой диалог вы хотите закрыть.