Bazı çözümler var, hepsini kontrol ettiğinizden emin olun :)
Yönlendirici çıkışı, activate
yeni bir bileşen başlatılırken olayı yayınlayacaktır , böylece (activate)
(örneğin) en üste kaydırmak için kullanabiliriz :
app.component.html
<router-outlet (activate)="onActivate($event)" ></router-outlet>
app.component.ts
onActivate(event) {
window.scroll(0,0);
...
}
Örneğin, pürüzsüz bir kaydırma için bu çözümü kullanın :
onActivate(event) {
let scrollToTop = window.setInterval(() => {
let pos = window.pageYOffset;
if (pos > 0) {
window.scrollTo(0, pos - 20);
} else {
window.clearInterval(scrollToTop);
}
}, 16);
}
Seçici olmak istiyorsanız, her bileşenin kaydırmayı tetiklememesi gerektiğini söyleyin, aşağıdaki if
gibi bir ifadeyle kontrol edebilirsiniz :
onActivate(e) {
if (e.constructor.name)==="login"{
window.scroll(0,0);
}
}
Angular6.1'den beri { scrollPositionRestoration: 'enabled' }
, merakla yüklenen modüller üzerinde de kullanabiliriz ve tüm rotalara uygulanacaktır:
RouterModule.forRoot(appRoutes, { scrollPositionRestoration: 'enabled' })
Zaten düzgün kaydırmayı da yapacak. Ancak bu, her yönlendirmede bunu yapmak için sakıncalıdır.
Diğer bir çözüm, yönlendirici animasyonunda en üst kaydırmayı yapmaktır. Bunu, en üste kaydırmak istediğiniz her geçişe ekleyin:
query(':enter, :leave', style({ position: 'fixed' }), { optional: true })