Tengo más de 20 registros cargados en la tabla de material angular. Cuando hago clic en una fila, navega a una página. Y cuando presiono el botón Atrás, vuelve a la página de la tabla. El problema es que cuando hago clic en la última fila de la tabla, la posición de desplazamiento va hacia arriba. Solo quiero establecer la posición de desplazamiento cerca de la fila en la que se hizo clic.
¿Cómo logro eso y refiero el código en el siguiente enlace?
https://stackblitz.com/edit/angular-material-router-mra2ke?file=src/app/plain/plain.component.ts
Tendrá que hacer dos cosas para que el código existente funcione:
sessionStorage / localStorage o use una variable from shared service y establezca la id en las filas. Por ejemplo, puedes hacer algo como: get elementClickedId() { return sessionStorage.getItem('elementClickedId'); } set elementClickedId(id) { sessionStorage.setItem('elementClickedId', id); }Establecer id dentro de su html:
<td mat-cell *matCellDef="let element" [id]="element.position"> {{ element.position }} </td>moveToSection en ngOnInit , hágalo en ngAfterViewInit .Ejemplo de trabajo: https://stackblitz.com/edit/angular-material-router-eo6wnt?file=src/app/plain/plain.component.ts
PD: Angular viene con scrollPositionRestoration de configuración de navegación que ayuda a lograr esto. Pero desafortunadamente no funciona todo el tiempo, tiene un defecto: https://github.com/angular/angular/issues/24547
Necesita un servicio singleton para mantener la posición actual:
(Tenga en cuenta que también podemos usar localStorage o sessionStorage , pero se recomienda encarecidamente usar el servicio singleton y es mejor que usarlo de otra manera).
@Injectable({ providedIn: 'root', }) export class ApiService { elementClickedId:any; }Y también necesita establecer una identificación para su td:
<td mat-cell *matCellDef="let element" id={{element.position}}>{{ element.position }}</td> Y use ngAfterViewInit en lugar de ngOnInit para asegurarse de que después de completar la representación de su tabla, configure el desplazamiento.
Aquí hay una muestra de trabajo que he creado para usted: StackBlitzForked