कुछ उपाय हैं, उन सभी की जांच सुनिश्चित करें :)
राउटर आउटलेट activate
किसी भी समय किसी नए घटक को इंस्टेंट किए जाने पर घटना का उत्सर्जन करेगा , इसलिए हम (activate)
शीर्ष पर स्क्रॉल करने के लिए उपयोग कर सकते हैं (उदाहरण के लिए)
app.component.html
<router-outlet (activate)="onActivate($event)" ></router-outlet>
app.component.ts
onActivate(event) {
window.scroll(0,0);
//or document.body.scrollTop = 0;
//or document.querySelector('body').scrollTo(0,0)
...
}
छूट के लिए उपयोग करें, एक चिकनी स्क्रॉल के लिए यह समाधान :
onActivate(event) {
let scrollToTop = window.setInterval(() => {
let pos = window.pageYOffset;
if (pos > 0) {
window.scrollTo(0, pos - 20); // how far to scroll on each step
} else {
window.clearInterval(scrollToTop);
}
}, 16);
}
यदि आप चयनात्मक होना चाहते हैं, तो कहें कि प्रत्येक घटक को स्क्रॉलिंग को ट्रिगर नहीं करना चाहिए, आप इसे if
इस तरह से एक बयान में देख सकते हैं :
onActivate(e) {
if (e.constructor.name)==="login"{ // for example
window.scroll(0,0);
}
}
Angular6.1 के बाद से, हम { scrollPositionRestoration: 'enabled' }
उत्सुकता से लोड किए गए मॉड्यूल पर भी उपयोग कर सकते हैं और इसे सभी मार्गों पर लागू किया जाएगा:
RouterModule.forRoot(appRoutes, { scrollPositionRestoration: 'enabled' })
यह पहले से ही चिकनी स्क्रॉलिंग भी करेगा। हालांकि यह हर मार्ग पर करने के लिए असुविधाजनक है।
एक अन्य उपाय राउटर एनीमेशन पर शीर्ष स्क्रॉल करना है। इसे हर उस संक्रमण में जोड़ें जहां आप शीर्ष पर स्क्रॉल करना चाहते हैं:
query(':enter, :leave', style({ position: 'fixed' }), { optional: true })