यहाँ JavierFuentes उत्तर के संदर्भ के साथ एक और समाधान है:
<a [routerLink]="['self-route', id]" fragment="some-element" (click)="gotoHashtag('some-element')">Jump to Element</a>
स्क्रिप्ट में:
import {ActivatedRoute} from "@angular/router";
import {Subscription} from "rxjs/Subscription";
export class Links {
private scrollExecuted: boolean = false;
constructor(private route: ActivatedRoute) {}
ngAfterViewChecked() {
if (!this.scrollExecuted) {
let routeFragmentSubscription: Subscription;
routeFragmentSubscription = this.route.fragment.subscribe(fragment => {
if (fragment) {
let element = document.getElementById(fragment);
if (element) {
element.scrollIntoView();
this.scrollExecuted = true;
// Free resources
setTimeout(
() => {
console.log('routeFragmentSubscription unsubscribe');
routeFragmentSubscription.unsubscribe();
}, 0);
}
}
});
}
}
gotoHashtag(fragment: string) {
const element = document.querySelector("#" + fragment);
if (element) element.scrollIntoView(element);
}
}
यह उपयोगकर्ता को सीधे तत्व पर स्क्रॉल करने की अनुमति देता है, अगर उपयोगकर्ता सीधे यूआरएल में हैशटैग वाले पृष्ठ पर भूमि करता है।
लेकिन इस मामले में, मैंने रूट फ़्रैगमेंट को सब्सक्राइब कर लिया है, ngAfterViewChecked
लेकिन ngAfterViewChecked()
हर बार लगातार कॉल किया जाता है ngDoCheck
और यह उपयोगकर्ता को शीर्ष पर वापस स्क्रॉल करने की अनुमति नहीं देता है, इसलिएrouteFragmentSubscription.unsubscribe
तत्व को स्क्रॉल करने के बाद 0 मिली के टाइमआउट के बाद कॉल किया जाता है।
gotoHashtag
जब उपयोगकर्ता विशेष रूप से एंकर टैग पर क्लिक करता है, तो इसके अलावा विधि को स्क्रॉल करने के लिए परिभाषित किया जाता है।
अपडेट करें:
अगर url में querystrings है, तो [routerLink]="['self-route', id]"
अभ्यस्त अभ्रक को संरक्षित नहीं करेगा। मैंने उसी के लिए वर्कअराउंड का अनुसरण करने की कोशिश की:
<a (click)="gotoHashtag('some-element')">Jump to Element</a>
constructor( private route: ActivatedRoute,
private _router:Router) {
}
...
...
gotoHashtag(fragment: string) {
let url = '';
let urlWithSegments = this._router.url.split('#');
if(urlWithSegments.length){
url = urlWithSegments[0];
}
window.location.hash = fragment;
const element = document.querySelector("#" + fragment);
if (element) element.scrollIntoView(element);
}
123
लिए सवाल में क्या है) यह मानते हुए कि मार्ग पथ एक पैरामीटर की अपेक्षा करता है जैसे{ path: 'users/:id', ....}