มีวิธีแก้ปัญหาบางอย่างอย่าลืมตรวจสอบทั้งหมด :)
เต้ารับเราเตอร์จะปล่อยactivate
เหตุการณ์ทุกครั้งที่มีการสร้างอินสแตนซ์ส่วนประกอบใหม่ดังนั้นเราสามารถใช้(activate)
เพื่อเลื่อน (เช่น) ไปด้านบน:
app.component.html
<router-outlet (activate)="onActivate($event)" ></router-outlet>
app.component.ts
onActivate(event) {
window.scroll(0,0);
...
}
ใช้สำหรับตัวอย่างโซลูชันนี้สำหรับการเลื่อนที่ราบรื่น:
onActivate(event) {
let scrollToTop = window.setInterval(() => {
let pos = window.pageYOffset;
if (pos > 0) {
window.scrollTo(0, pos - 20);
} else {
window.clearInterval(scrollToTop);
}
}, 16);
}
หากคุณต้องการที่จะเลือกอย่าพูดว่าทุกองค์ประกอบไม่ควรกระตุ้นการเลื่อนคุณสามารถตรวจสอบได้ในif
คำสั่งดังนี้:
onActivate(e) {
if (e.constructor.name)==="login"{
window.scroll(0,0);
}
}
ตั้งแต่ Angular6.1 เรายังสามารถใช้ { scrollPositionRestoration: 'enabled' }
กับโมดูลที่โหลดอย่างกระตือรือร้นและจะนำไปใช้กับทุกเส้นทาง:
RouterModule.forRoot(appRoutes, { scrollPositionRestoration: 'enabled' })
นอกจากนี้ยังจะทำการเลื่อนอย่างราบรื่นอยู่แล้ว อย่างไรก็ตามสิ่งนี้ไม่สะดวกในการทำในทุกเส้นทาง
วิธีแก้ปัญหาอื่นคือการเลื่อนด้านบนของภาพเคลื่อนไหวของเราเตอร์ เพิ่มสิ่งนี้ในทุกการเปลี่ยนแปลงที่คุณต้องการเลื่อนไปด้านบน:
query(':enter, :leave', style({ position: 'fixed' }), { optional: true })