10 ميزات زاويّة مفيدة فاتتك


إذا كنت تكتب بانتظام الطلبات في Angular وقضيت أكثر من مائة ساعة عليها ، فأنت على الأرجح تعرف عن هذه الوظائف. ولكن ، مع ذلك ، للتأكد - اقرأ:

قبل أن ننتقل إلى وظائف Angular ، تجدر الإشارة إلى أداة واحدة مفيدة جدًا. يجعل Bit (Github) من السهل العمل على مكونات Angular معًا ومشاركتها. أوصي بإخلاص بالحفاظ على واجهة متسقة ، وتسريع التطوير وتقليل عدد الأخطاء في التعليمات البرمجية.


مثال: لوادر دائرية للزاوية مع bit.dev


1. العنوان


علامة العنوان هي عنصر HTML يحدد عنوان صفحة الويب. تظهر العناوين في صفحة نتائج البحث (SERP) كعنوان قابل للنقر للنتيجة. إنها مهمة جدًا لقابلية الاستخدام وتحسين محركات البحث والترويج الاجتماعي. شبكات.

تأخذ التطبيقات الزاويّة العنوان من العلامة ... في index.html. بشكل افتراضي ، لا يغير الانتقال بين المكونات في Angular هذا الرأس.

هل تعلم أنه يمكن تعيين عنوان بشكل منفصل عن كل مكون؟

Angular لديه خدمة العنوان فيالزاوي/ متصفح النظام الأساسي. يمكنك تضمينها بسهولة في مكونات أخرى واستخدام طريقة setTitle لتجاوز العنوان.

import { Title } from "@angular/platform-browser"@Component({
   ...
})
export class LoginComponent implements OnInit {
   constructor(private title: Title) {}    ngOnInit() {
       title.setTitle("Login")
   }
}

عند الانتقال إلى LoginComponent في التطبيق ، سيتغير عنوان نافذة المتصفح إلى "تسجيل الدخول".

يمكن فعل الشيء نفسه في أي مكون ، وبناءً على ذلك ، أثناء التنقل داخل التطبيق ، سيتغير العنوان ، استجابة لإجراءات المستخدم.

2. ميتا


يتم أيضًا أخذ العلامات الوصفية للتطبيق الزاوي من ملف index.html. ولتعيينها من المكونات ، خدمة Meta منالزاوي/ متصفح النظام الأساسي.

ومرة أخرى: يعد استخدام العلامات الوصفية مفيدًا من حيث تحسين محركات البحث وترويج الصفحة في الشبكات الاجتماعية. الشبكات ، فهي تحتوي على معلومات حول صفحة ويب تستخدمها محركات البحث للترتيب والعرض بشكل صحيح في نتائج البحث.

لاستخدام مكون العلامة الوصفية ، قم باستيراد Meta منالزاوي/ متصفح النظام الأساسي وتضمينه في المكون المطلوب.

import { Meta } from "@angular/platform-browser"@Component({
    ...
})
export class BlogComponent implements OnInit {
    constructor(private meta: Meta) {}    ngOnInit() {
        meta.updateTag({name: "title", content: ""})
        meta.updateTag({name: "description", content: "Lorem ipsum dolor"})
        meta.updateTag({name: "image", content: "./assets/blog-image.jpg"})
        meta.updateTag({name: "site", content: "My Site"})
    }
}

يمكن الآن عرض BlogComponent بشكل صحيح على Twitter و Facebook وما إلى ذلك. في نفس الوقت عرض الأوصاف والعناوين والصور في شكل صحيح وقابل للقراءة.
هل سمعت عن هذا أيضًا؟ ثم هناك شيء أكثر إثارة للاهتمام.

3. الاستيفاء نمط تجاوز


الوسيط القياسي في الأنماط هو {{}}. إذا أدخلت متغيرًا بين {{و}} ، فسيتم عرض قيمته في DOM النهائي.

هل تعلم أنه من الممكن تجاوز محددات التغليف القياسية على أي أحرف؟ انه سهل. ما عليك سوى تحديد قيم جديدة في خاصية الاستيفاء في الديكور المركب.

@Component({
   interpolation: ["((","))"]
})
export class AppComponent {}

تم تغيير الإقحام المستخدم في قالب AppComponent إلى (()) ، ولم يعد {{}} يعمل.

@Component({
   template: `
       <div>
           ((data))
       </div>
   `,
   interpolation: ["((","))"]
})
export class AppComponent {
   data: any = "dataVar"
}

في المتصفح ، سترى أن السلسلة "dataVar" سيتم عرضها بدلاً من ((data)).

4. الموقع


يمكننا الحصول على عنوان URL الحالي للصفحة المفتوحة في المتصفح باستخدام خدمة الموقع. استنادًا إلى الموقع الجغرافي الاستراتيجي المستخدم ، سيتم تخزين الموقع إما عن طريق المسار في عنوان URL (/ example / page /) أو عن طريق الجزء من عنوان URL بعد الجنيه (# test / page /).

باستخدام الموقع ، يمكننا الانتقال إلى عنوان URL ، أو المضي قدمًا في القصة ، أو الرجوع ، أو تغيير عنوان URL الحالي ، أو استبدال العنصر العلوي في القصة.

ستساعد خدمة الموقع من CommonModule هنا.

import { Location } from "@angular/common"@Component({
   ...
})
export class AppComponent {
   constructor(private location: Location) {}    navigateTo(url) {
       this.location.go(url)
   }    goBack() {
       location.back()
   }    goForward() {
       location.forward()
   }
}


5. الوثيقة


في بعض الأحيان تحتاج إلى الحصول على نموذج مستند من أجل تنفيذ عمليات DOM مباشرة من تطبيق Angular.

الوثيقة تخدم فقط هذا الغرض. DOCUMENT هو رمز مميز لـ DI يمثل سياق العرض الرئيسي. في المستعرض ، يعد هذا مستند DOM. يوفر عمليات DOM بغض النظر عن وقت التشغيل.

ملاحظة: قد لا يكون المستند متاحًا في سياق التطبيق إذا لم يتطابق سياقا التطبيق والعرض (على سبيل المثال ، عند بدء التطبيق في Web Worker).

لنفترض أن لدينا نوعًا من عنصر HTML:

<canvas id="canvas"></canvas>


للحصول على HTMLElement ، قم بتطبيق DOCUMENT:

@Component({})
export class CanvasElement {
   constructor(@Inject(DOCUMENT) _doc: Document) {}
}


احصل على قماش HTMLElement باستخدام getElementById ()

@Component({})
export class CanvasElement {
   constructor(@Inject(DOCUMENT) _doc: Document) {}    renderCanvas() {
       this._doc.getElementById("canvas")
   }
}


تحذير: استخدم الوثيقة بعناية! يعد التفاعل مع DOM أمرًا خطيرًا بشكل مباشر ويزيد من خطر XSS.

6. ديكور @ Attribute


بشكل أساسي ، في تطبيق Angular ، يستخدمون الديكور المكون والوحدة والتوجيه.

ومع ذلك ، هناك أيضًا مصمم سمة يسمح لك بتمرير سلسلة ثابتة دون أداء غير ضروري ، وتجاوز فحص التغيير.

يتم فحص قيم مصمم السمة مرة واحدة فقط. تستخدم مثل الديكورإدخال:

@Component({
   ...
})
export class BlogComponent {
   constructor(@Attribute("type") private type: string ) {}
}


7. HttpInterceptor


HttpInterceptor هي ميزة قوية جدًا في Angular تسمح لك باعتراض طلبات HttpRequest ومعالجتها.

يقوم معظم المعترضين بتحويل الطلب الصادر قبل تمريره إلى المعترض التالي في السلسلة عن طريق استدعاء next.handle (convertedReq).

في حالات نادرة ، يمكن للمعترضين معالجة الطلب بأنفسهم بالكامل ، وعدم تفويض بقية السلسلة بشكل أكبر. هذا السلوك مسموح به.

يُستخدم HttpInterceptor غالبًا في:

  • المصادقة
  • التخزين المؤقت
  • خلفية وهمية
  • تحويل URL
  • تخريب الرأس

لاستخدام هذا المعترض ، تحتاج إلى إنشاء خدمة وتنفيذ واجهة HttpInterceptor.

@Injectable()
export class MockBackendInterceptor implements HttpInterceptor {
   constructor() {}    intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
       ...
   }
}

أدخله في الوحدة الرئيسية:
@NgModule({
   ...
   providers: [
       {
           provide: HTTP_INTERCEPTORS,
           useClass: MockBackendInterceptor,
           multi: true
       }
   ]
   ...
})
export class AppModule {}


8. AppInitializer


في بعض الأحيان ، عند تشغيل تطبيق Angular ، من الضروري تهيئة جزء معين من التعليمات البرمجية. على سبيل المثال ، قم بتحميل الإعدادات ، أو تحميل ذاكرة التخزين المؤقت ، أو تحميل أي تكوينات أو إجراء عمليات فحص. تم إنشاء الرمز المميز AppInitialzer خصيصًا لهذا الغرض.
APP_INITIALIZER: يتم تنفيذ الوظيفة فور تشغيل التطبيق.
لنفترض أننا بحاجة إلى تشغيل بعض وظيفة runSettings عند بدء تطبيق Angular:

function runSettingsOnInit() {
   ...
}

للقيام بذلك ، دعنا ننتقل إلى وحدة AppModule الرئيسية وإضافتها إلى قسم مزودي الديكور NgModule:

@NgModule({
   providers: [
       { provide: APP_INITIALIZER, useFactory: runSettingsOnInit }
   ]
})

9. مستمع التمهيد


عن طريق القياس مع AppInitialzer ، فإن Angular لها وظيفة تسمح لك بتتبع تحميل المكون. هذا APP_BOOTSTRAP_LISTENER.

سيتم استدعاء جميع عمليات الاسترجاعات التي يتم إرجاعها بواسطة هذا الرمز المميز لكل مكون قابل للتنزيل.

يمكنك استخدام هذه الميزة لتتبع تمهيد المكونات في كثير من الحالات. على سبيل المثال ، تستخدم وحدة الموجه الوحدة لتدمير وإنشاء المكونات بناءً على التنقل في المسار.

لاستخدام APP_BOOTSTRAP_LISTENER ، تحتاج إلى إضافته إلى قسم الموفرين في AppModule مع وظيفة رد الاتصال:

@NgModule({
   {
       provide: APP_BOOTSTRAP_LISTENER, multi: true,
       useExisting: runOnBootstrap
   }
   ...
})
export class AppModule {}


10. NgPlural


التعددية هي صداع للمبرمجين. تنشأ مهمة التعديل النحوي لأشكال الكلمات اعتمادًا على استخدام المفرد / الجمع باستمرار. تستخدم بعض المواقع ببساطة النهايات لهذا الغرض. على سبيل المثال:

1 component(s) removed
3 component(s) removed

أي أن القارئ نفسه يجب أن يفهم ما هو ضمني:

يقترح Angular حل هذه المشكلة بطريقة أكثر حضارية ، باستخدام التوجيه NgPlural.

يقوم NgPlural بإضافة أو إزالة الفروع الفرعية لـ DOM بناءً على قيمة رقمية. للتعددية ، هذا ما تحتاجه.

لاستخدام هذا التوجيه ، يجب عليك تعيين السمة [ngPlural] إلى حاوية العناصر كتعبير تبديل. سيتم عرض العناصر الداخلية بسمة [ngPluralCase] ​​اعتمادًا على الشروط المحددة:

<p [ngPlural]="components">
   <ng-template ngPluralCase="=1">1 component removed</ng-template>   
   <ng-template ngPluralCase=">1">{{components}} components removed </ng-template>   
</p>


يمكنك الآن التخلص من "(s)". يساعد التوجيه NgPlural في اشتقاق شكل الكلمة الصحيح بناءً على المعنى. مجموع:

// if 1 component
1 component removed

// if 5 components
5 components removed


Source: https://habr.com/ru/post/undefined/


All Articles