জাভিয়ারফুয়েন্তস উত্তরের উল্লেখ সহকারে এখানে আরও একটি আলোচনা করা হয়েছে:
<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
ব্যবহারকারী যখন অ্যাঙ্কার ট্যাগটিতে সুনির্দিষ্টভাবে ক্লিক করেন তখন অতিরিক্তভাবে পদ্ধতিটিকে স্ক্রোল করতে সংজ্ঞায়িত করা হয়।
হালনাগাদ:
যদি ইউআরএলটিতে ক্যোরিস্ট্রিং [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', ....}