كيفية استخدام وإنشاء توجيهات مخصصة في Angular
بعد اللعب مع Angular لفترة طويلة ، توصلت أخيرًا إلى شرح مفهوم لتوجيهات Angular. في هذه المقالة ، سوف نفهم أولاً ما هو التوجيه بالضبط وكيفية استخدامه في Angular. سننشئ توجيهاتنا المخصصة أيضًا. فما الذي ننتظره؟ دعونا نتعمق في ذلك.
ما هو التوجيه الزاوي؟
التوجيهات هي الوظائف التي سيتم تنفيذها متى وجدها مترجم Angular . تعمل التوجيهات الزاويّة على تحسين قدرة عناصر HTML من خلال إرفاق سلوكيات مخصصة بـ DOM.
من المفهوم الأساسي ، يتم تصنيف توجيهات Angular إلى ثلاث فئات.
- توجيهات السمة
- التوجيهات الهيكلية
- مكونات
توجيهات السمة
تعتبر توجيهات السمات مسؤولة عن معالجة مظهر وسلوك عناصر DOM. يمكننا استخدام توجيهات السمات لتغيير نمط عناصر DOM. تُستخدم هذه التوجيهات أيضًا لإخفاء أو إظهار عناصر DOM معينة بشكل مشروط. يوفر Angular العديد من توجيهات السمات المضمنة مثل NgStyle و NgClass وما إلى ذلك. يمكننا أيضًا إنشاء توجيهات السمات المخصصة الخاصة بنا للوظائف المطلوبة.
التوجيهات الهيكلية
التوجيهات الهيكلية هي المسؤولة عن تغيير هيكل DOM. إنها تعمل عن طريق إضافة أو إزالة العناصر من DOM ، على عكس توجيهات السمات التي تغير مظهر العنصر وسلوكه.
يمكنك التمييز بسهولة بين التوجيه الهيكلي والتوجيه الخاص بالسمة من خلال النظر في بناء الجملة. يبدأ اسم التوجيه الإنشائي دائمًا بعلامة النجمة (*) ، بينما لا يحتوي توجيه السمة على أي بادئة. التوجيهات الإنشائية الثلاثة الأكثر شيوعًا التي توفرها Angular هي NgIf و NgFor و NgSwitch .
مكونات
المكونات هي توجيهات مع القوالب. الاختلاف الوحيد بين المكونات والنوعين الآخرين من التوجيهات هو النموذج. لا تحتوي توجيهات السمات والهيكلية على قوالب. لذلك ، يمكننا القول أن المكون هو نسخة أنظف من التوجيه مع قالب ، وهو أسهل في الاستخدام.
استخدام التوجيهات الزاويّة المدمجة
هناك الكثير من التوجيهات المضمنة المتوفرة في Angular والتي يمكنك استخدامها بسهولة. في هذا القسم ، سوف نستخدم توجيهين مضمنين بسيطين للغاية.
توجيه NgStyle هو توجيه خاص بالخاصية يستخدم لتغيير تصميم أي عنصر DOM على أساس بعض الشروط.
I am an Attribute Directive
في مقتطف الشفرة أعلاه ، نضيف خلفية زرقاء إذا كانت قيمة
isBlue
المتغير صحيحة. إذا كانت قيمة
isBlue
المتغير خاطئة ، فستكون خلفية العنصر أعلاه باللون الأحمر.
NgIf التوجيه هو توجيه هيكلي يستخدم لإضافة عناصر إلى DOM وفقًا لبعض الشروط.
I am a Structural Directive
في مقتطف الشفرة أعلاه ، ستبقى الفقرة بأكملها في DOM إذا كانت قيمة
show
المتغير صحيحة ، وإلا فإنها ستنطلق من DOM.
إنشاء توجيه سمة مخصصة
إن إنشاء توجيه مخصص يشبه تمامًا إنشاء مكون Angular. لإنشاء توجيه مخصص ، يتعين علينا استبدال @Component
المصمم @Directive
بديكور.
لذا ، فلنبدأ في إنشاء أول توجيه خاص بالسمة المخصصة. في هذا التوجيه ، سنقوم بتمييز عنصر DOM المحدد عن طريق تعيين لون خلفية العنصر.
أنشئ app-highlight.directive.ts
ملفًا في src/app
مجلد وأضف مقتطف الشفرة أدناه.
import { Directive, ElementRef } from '@angular/core';
@Directive({
selector: '[appHighlight]'
})
export class HighlightDirective {
constructor(private eleRef: ElementRef) {
eleRef.nativeElement.style.background = 'red';
}
}
هنا، ونحن استيراد Directive
و ElementRef
من قلب الزاوي. و Directive
يوفر وظائف @Directive
الديكور التي نقدمها محدد ممتلكاتها إلى appHighLight
حتى نتمكن من استخدام هذا في أي مكان محدد في التطبيق. نقوم أيضًا باستيراد العنصر ElementRef
المسؤول عن الوصول إلى عنصر DOM.
الآن لكي يعمل appHighlight
التوجيه ، نحتاج إلى إضافة التوجيه الخاص بنا إلى مصفوفة الإعلانات في app.module.ts
الملف.
import ...;
import { ChangeThemeDirective } from './app-highlight.directive';
@NgModule({
declarations: [
AppComponent,
ChangeThemeDirective
],
imports: [
...
],
providers: [],
bootstrap: [AppComponent]
})
export class AppModule { }
الآن سنستخدم التوجيه المخصص الذي أنشأناه حديثًا. أقوم بإضافة appHightlight
التوجيه في app.component.html
ولكن يمكنك استخدامه في أي مكان في التطبيق.
Highlight Me !
سيبدو إخراج مقتطف الشفرة أعلاه بهذا الشكل.

إنشاء توجيه هيكلي مخصص
في القسم السابق ، أنشأنا توجيه السمة الأول. يتم استخدام نفس الأسلوب لإنشاء التوجيه الهيكلي أيضًا.
لذا ، فلنبدأ في إنشاء التوجيه الهيكلي. في هذا التوجيه ، سنقوم بتنفيذ *appNot
التوجيه الذي سيعمل عكسًا تمامًا *ngIf
.
الآن قم بإنشاء app-not.directive.ts
ملف في src/app
المجلد وأضف الكود أدناه.
import { Directive, Input, TemplateRef, ViewContainerRef } from '@angular/core';
@Directive({
selector: '[appNot]'
})
export class AppNotDirective {
constructor(
private templateRef: TemplateRef,
private viewContainer: ViewContainerRef) { }
@Input() set appNot(condition: boolean) {
if (!condition) {
this.viewContainer.createEmbeddedView(this.templateRef);
} else {
this.viewContainer.clear(); }
}
}
كما رأيت في مقتطف الشفرة أعلاه ، نحن نستورد Directive, Input, TemplateRef and ViewContainerRef
من@angular/core.
Directive
يوفر نفس الوظيفة @Directive
لمصمم الديكور. يستخدم Input
المصمم للتواصل بين المكونين. يرسل البيانات من مكون إلى آخر باستخدام خاصية ربط.
TemplateRef
يمثل القالب المضمن الذي يتم استخدامه لإنشاء مثيل للعروض المضمنة. ترتبط طرق العرض المضمنة هذه بالقالب الذي سيتم عرضه.
ViewContainerRef
عبارة عن حاوية حيث يمكن إرفاق عرض واحد أو أكثر. يمكننا استخدام createEmbeddedView()
الوظيفة لإرفاق القوالب المضمنة في الحاوية.
الآن لكي تعمل appNot
التعليمة ، نحتاج إلى إضافة التوجيه الخاص بنا إلى مصفوفة الإعلانات في app.module.ts
الملف.
import ...;
import { AppNotDirective } from './app-not.directive';
@NgModule({
declarations: [
AppComponent,
AppNotDirective
],
imports: [
...
],
providers: [],
bootstrap: [AppComponent]
})
export class AppModule { }
الآن ، حان الوقت لاستخدام التوجيه الهيكلي المنشأ حديثًا.
أقوم بإضافة appNot
التوجيه في app.component.html
ولكن يمكنك استخدامه في أي مكان في التطبيق.
True
False
و *appNot
تم تصميم التوجيه بطريقة فإنه يلحق العنصر القالب في DOM إذا كانت *appNot
القيمة هي false
فقط مقابل *ngIf
التوجيه.
سيبدو إخراج مقتطف الشفرة أعلاه بهذا الشكل.

آمل أن يكون هذا المقال قد أجاب على معظم أسئلتك المتعلقة بتوجيهات Angular. إذا كانت لديك أي استفسارات أو شكوك ، فلا تتردد في التواصل معي في مربع التعليقات.