العودة إلى الدورة

الوصول إلى مُعلمات المسار (Snapshot مقابل Observable)

مطور Angular الشامل: من الصفر إلى الاحتراف

35. الوصول إلى مُعلمات المسار

تتطلب المسارات الديناميكية معلمات (على سبيل المثال، /user/10، حيث 10 هي المعلمة). يوفر Angular خدمة ActivatedRoute للوصول إلى هذه المعلمات.

1. تحديد مسار مُعلَّم

استخدم النقطتين الرأسيتين (:) متبوعتين باسم المعلمة.

typescript const routes: Routes = [ { path: 'user/:id', component: UserDetailComponent } ];

2. الوصول إلى المعلمات: Snapshot (بيانات ثابتة)

إذا كان مضموناً تدمير المكون وإعادة إنشائه كلما تغير المسار (على سبيل المثال، التنقل من /user/1 إلى /about)، فإن snapshot كافٍ.

typescript import { ActivatedRoute } from '@angular/router';

export class UserDetailComponent implements OnInit { userId: string | null = null;

constructor(private route: ActivatedRoute) { }

ngOnInit(): void { // يقرأ المعلمة على الفور عند التهيئة this.userId = this.route.snapshot.paramMap.get('id'); // جلب بيانات المستخدم باستخدام this.userId } }

3. الوصول إلى المعلمات: Observable (بيانات تفاعلية)

إذا تنقل المستخدم بين المسارات التي تستخدم نفس المكون (على سبيل المثال، /user/1 إلى /user/2)، فسيتم إعادة استخدام مثيل المكون، ولن يتم تشغيل ngOnInit مرة أخرى. في هذه الحالة، يجب علينا الاشتراك في paramMap Observable للتفاعل مع التغييرات.

typescript // ... في UserDetailComponent

ngOnInit(): void { this.route.paramMap.subscribe(params => { this.userId = params.get('id'); console.log('New User ID:', this.userId); // إعادة جلب البيانات هنا في كل مرة يتغير فيها المعرّف }); }

أفضل الممارسات: استخدم دائماً نهج Observable لمعلمات المسار ما لم تكن متأكداً أن المكون لن ينتقل إلى نفسه أبداً.