@Component
Decorator1.1 الغرض من @Component
Decorator
عند الإعلان عن مكون، يجب استخدام @Component Decorator في فئة المكون لإخبار Angular أن هذا مكون. [توصية البرنامج التعليمي ذات الصلة: "البرنامج التعليمي الزاوي"]
import { Component, OnInit } from '@angular/core'; @عنصر({ المحدد: "تنبيهات منتج التطبيق"، templateUrl: './product-alerts.component.html'، styleUrls: ['./product-alerts.component.css'] }) فئة التصدير ProductAlertsComponent تنفذ OnInit { منشئ () { } نجونينيت () { } }
1.2 الخيارات الشائعة لـ @Component
Decorator
@Component
Decorator يرث من Directive
. يتم استخدام محدد CSS هذا لتمييز التوجيه في القالب وتشغيل إنشاء مثيل للتوجيه.
1.2.1继承自@Directive装饰器的选项
نوع | الخياروصف | محدد |
---|---|---|
سلسلة | اسم محددCSS | ، يستخدم لتمييز التوجيه (المكون) في القالب وتشغيل |
سلسلة | إدخالات | الإنشاء الخاصة به []سيقوم Angular تلقائيًا أثناء اكتشاف التغيير بتحديث خصائص الإدخال. تحدد سمة الإدخال مجموعة من عناصر التكوين التي تشير من directiveProperty إلى BindingProperty: · DirectiveProperty يستخدم لتحديد الخاصية ضمن التوجيه الذي سيتم كتابة القيمة إليه. · يتم استخدام BindingProperty لتحديد خاصية DOM التي سيتم قراءة القيمة منها. عندما لا يتم توفير BindingProperty، فمن المفترض أن يكون نفس DirectiveProperty. |
سلسلة | المخرجات | []مجموعة من خصائص الإخراج لربط الحدث. عندما تقوم خاصية الإخراج بإصدار حدث، يتم استدعاء معالج في القالب المرفق بالحدث. تقوم كل خاصية إخراج بتعيين DirectiveProperty إلى BindingProperty: · DirectiveProperty يحدد خاصية المكون لبث الحدث. · BindingProperty يحدد سمة HTML التي سيتم إرفاق معالج الحدث بها. |
يوفر | Provider[] | مجموعة من موفري الخدمة |
ExportAs | string | اسم واحد أو أكثر يمكن استخدامه لتعيين هذا التوجيه لمتغير في القالب. عندما تكون هناك أسماء متعددة، افصل بينها بفواصل. |
الاستعلامات | {[key:string]:any} | بتكوين بعض الاستعلامات التي سيتم إدراجها في هذا التوجيه. يتم تعيين استعلام المحتوى قبل استدعاء رد الاتصال ngAfterContentInit. سيتم تعيين استعلام العرض قبل استدعاء رد الاتصال ngAfterViewInit. |
كان | صحيحًا | ، فسيتم تجاهل التعليمات/المكون بواسطة مترجم AOT، لذلك سيتم تجميعه دائمًا بواسطة JIT. هذا الخيار هو لدعم مترجمي Ivy المستقبليين وليس له أي تأثير حتى الآن. |
المضيف | {[key:string]:string} | مجموعة من أزواج القيمة الرئيسية لتعيين خصائص الفئة لاستضافة روابط العناصر (الخصائص والسمات والأحداث). يتحقق Angular تلقائيًا من روابط خاصية المضيف أثناء اكتشاف التغيير. إذا تغيرت القيمة المرتبطة، يقوم Angular بتحديث العنصر المضيف للتوجيه. عندما يكون المفتاح خاصية للعنصر المضيف، سيتم نشر قيمة الخاصية إلى سمة DOM المحددة. عندما يكون المفتاح سمة ثابتة في DOM، سيتم نشر قيمة السمة إلى الخاصية المحددة في العنصر المضيف. للتعامل مع الحدث: · مفتاحه هو حدث DOM الذي تريد التعليمات الاستماع إليه. للاستماع إلى حدث عالمي، أضف الهدف الذي تريد الاستماع إليه أمام اسم الحدث. يمكن أن يكون الهدف نافذة أو مستندًا أو نصًا. · قيمته هي البيان الذي سيتم تنفيذه عند وقوع الحدث. إذا أعاد هذا البيان خطأ، فسيتم استدعاء وظيفة منع الافتراضي لحدث DOM هذا. يمكن الإشارة إلى المتغير المحلي $event في هذا البيان للحصول على بيانات الحدث. |
1.2.2 @Component自己特有的选项
وصف | نوع | الخيار | |
---|---|---|---|
ChangeDetection | ChangeDetectionStrategy | عندما يتم إنشاء مثيل للمكون، سيقوم Angular بإنشاء كاشف تغيير، وهو المسؤول عن نشر التغييرات في كل قيمة ربط للمكون. السياسة هي إحدى القيم التالية: · ChangeDetectionStrategy#OnPush(0) يقوم بتعيين الإستراتيجية على CheckOnce (حسب الطلب). · ChangeDetectionStrategy#Default(1) يقوم بتعيين الإستراتيجية على CheckAlways. | |
viewProviders | Provider[] | مجموعة من الكائنات القابلة للحقن المتوفرة في كل عقدة تابعة لسلسلة | |
معرف | الوحدة | التي تحتوي على معرف الوحدة التي تحتوي على المكون. يجب أن يكون المكون قادرًا على حل عناوين URL النسبية المستخدمة في القوالب وأوراق الأنماط. يقوم SystemJS بتصدير المتغير __moduleName في كل وحدة. في CommonJS، يمكن ضبط هذا على الوحدة النمطية.id. | |
سلسلة | templateUrl | عنوانURL لملف قالب المكون. إذا تم توفيره، فلا تستخدم القالب لتوفير قوالب مضمنة. | |
القالب المضمن | لمكونسلسلة | القالب | .إذا تم توفيره، فلا تستخدم templateUrl لتوفير القالب. |
سلسلة | styleUrls | []عنوان URL واحد أو أكثر، يشير إلى الملف الذي يحتوي على ورقة أنماط CSS لهذا المكون. | |
الأنماط | [] | واحد أو أكثر من أنماط CSS المضمنة التي يستخدمها هذا المكون. | |
الرسوم المتحركة | أي[] | استدعاء واحد أو أكثر من استدعاءات الرسوم المتحركة () التي تحتوي على بعض تعريفات الحالة () والانتقال (). | |
Encapsulation | ViewEncapsulation | هي إستراتيجية تغليف النمط التي تستخدمها القوالب وأنماط CSS. القيم هي: · ViewEncapsulation.ShadowDom: استخدم Shadow DOM. إنه يعمل فقط على الأنظمة الأساسية التي تدعم Shadow DOM أصلاً. · ViewEncapsulation.Emulated: استخدم CSS لامعًا لمحاكاة السلوك الأصلي. · ViewEncapsulation.None: استخدم CSS العالمي بدون أي تغليف. إذا لم يتم توفير القيمة، فسيتم الحصول على القيمة من CompilerOptions. خيار المحول البرمجي الافتراضي هو ViewEncapsulation.Emulated. إذا تم تعيين السياسة على ViewEncapsulation.Emulated ولم يحدد المكون الأنماط أو styleUrls، فسيتم التبديل تلقائيًا إلى ViewEncapsulation.None. | |
الاستيفاء | [string, string] | يتجاوز محددات البداية والنهاية الافتراضية لتعبيرات الاستيفاء ({ { and }}) | |
entryComponents | Array<Type | Any[]> | |
protectedWhitespaces | boolean | إذا كان صحيحًا، فسيتم الاحتفاظ به، وإذا كان خطأ، فستتم إزالة أحرف المسافات البيضاء الإضافية المحتملة من القالب المترجم. أحرف المسافة البيضاء هي تلك الأحرف التي تطابق s في تعبيرات JavaScript العادية. الإعدادات الافتراضية هي خطأ ما لم يتم تجاوزها عبر خيارات المترجم. |
selector
استخدام أحد النماذج التالية:
element-name
: حدد[attribute]
بناءً على اسم العنصر: حدد.class
بناءً على اسم السمة: حدد [سمة=قيمة] بناءً على اسم الفئةnot(sub_selector)
: حدد المحدد 1، المحدد 2 فقط عندما لا يتطابق العنصر مع المحدد الفرعي sub_selectorselector1, selector2
يتم تحديد 2.1 سواء كان المحدد 1 أو المحدد 2 يتطابق مع element-name
: حدد
@Component({ المحدد: "عنصر التطبيق"، القالب: "./element.component.html"، styleUrls: ['./element.component.css'] })
<app-element></app-element>
2.2 [attribute]
: حدد
@Component({ المحدد: '[عنصر التطبيق]'، القالب: "./element.component.html"، styleUrls: ['./element.component.css'] })
<div app-element></div>
2.3 .class
: حدد
@Component({ المحدد: '.app-element'، القالب: "./element.component.html"، styleUrls: ['./element.component.css'] })
<div class="app-element"></div>
host
: يستخدم {[key:string]:string}
مجموعة من أزواج القيمة الرئيسية لتعيين خصائص الفئة لربط المضيف العنصر (الخاصية والسمات والأحداث).
يتحقق Angular تلقائيًا من روابط خاصية المضيف أثناء اكتشاف التغيير. إذا تغيرت القيمة المرتبطة، يقوم Angular بتحديث العنصر المضيف للتوجيه.
لمعالجة الحدث:
3.1 attribute
والخاصية property
أوجه التشابه والاختلاف:
双向
dom 的property
dom 的property
، لذا فإن التعليمات مرتبطة بالخاصية، لكن في بعض الحالات لا تكون dom موجودة، مثل colspan، وrowspan، وما إلى ذلك. إذا كنت تريد ربط خصائص علامة html، فستحتاج إلى استخدام attr
:
<table. العرض = "100٪" الحدود = "10 بكسل صلب"> <تر> <th>الشهر</th> <th>الادخار</th> </tr> <تر> <td [attr.colspan]=colnum>يناير</td> </tr> <تر> <td [attr.colspan]=colnum>فبراير</td> </tr> </الجدول> Let colnum:number = 2;
3.2 استخدم host
لربط class
@Component({ المحدد: '.app-element'، القالب: "./element.component.html"، styleUrls: ['./element.component.css']، يستضيف: { '[class.default-class]': 'useDefault' }, التغليف: ViewEncapsulation.None // دع العنصر المضيف يستخدم أيضًا نمط element.component.css. بخلاف ذلك، يتم استخدام الكبسولات بشكل افتراضي لتجنب تلوث CSS. }) فئة التصدير AppElementComponent { @Input() useDefault = true; }
<div class="app-element"></div>
3.3 استخدم style
ربط host
@Component({ المحدد: '.app-element'، القالب: "./element.component.html"، styleUrls: ['./element.component.css']، يستضيف: { '[style.background]': 'inputBackground' } }) فئة التصدير AppElementComponent { @Input() inputBackground = 'red'; }
<div class="app-element"></div>
3.4 استخدم host
لربط الأحداث
@Component({ المحدد: '.app-element'، القالب: "./element.component.html"، styleUrls: ['./element.component.css']، يستضيف: { '(انقر)': 'onClick($event)' } }) فئة التصدير AppElementComponent { عامة عند النقر(حدث $) { console.log($event); } }
<div class="app-element"></div>
encapsulation
(التغليف)استراتيجية تغليف النمط للقوالب وأنماط CSS.
4.1 تقوم مكونات الويب
بتغليف أحد المكونات بطريقة موحدة وغير تدخلية. يمكن لكل مكون تنظيم بنية HTML الخاصة به ونمط CSS وتعليمات JavaScript البرمجية دون不会干扰
العناصر الأخرى على الصفحة.
تتكون مكونات الويب من التقنيات الأربع التالية:
4.2 Shadow DOM
<!DOCTYPE html> <أتش تي أم أل> <الرأس> <ميتا محارف = "UTF-8"> <title>Shadow DOM</title> <نمط النوع = "نص/CSS"> .shadowroot_son { اللون: #f00؛ } </نمط> </الرأس> <الجسم> <p>أنا لست في Shadow Host</p> <div>مرحبًا بالعالم!</div> <النص البرمجي> // مضيف الظل var ShadowHost = document.querySelector('.shadowhost'); // إنشاء جذر الظل (جذر الظل) var ShadowRoot = ShadowHost.createShadowRoot(); // جذر الظل هو العقدة الأولى لشجرة الظل، والعقد الأخرى مثل العقدة p هي العقد الفرعية لها. ShadowRoot.innerHTML = '<p>أنا في Shadow Host</p>'; </script> </الجسم> <html>
4.3 ViewEncapsulation
يتيح ViewEncapsulation تعيين ثلاث قيم اختيارية:
4.3.1 ViewEncapsulation.None
import { Component, ViewEncapsulation } from '@angular/core'; @عنصر({ المحدد: "تطبيقي"، القالب: ` <h4>مرحبًا بك في Angular World</h4> <p class="greet">مرحبًا {{name}}</p> `، الأنماط: [` تحية { الخلفية: #369؛ اللون: أبيض؛ } `]، التغليف: ViewEncapsulation.None // لا شيء | }) فئة التصدير AppComponent { الاسم: سلسلة = 'Semlinker'؛ }
نتيجة إعداد ViewEncapsulation.None
هي عدم وجود Shadow DOM
، ويتم تطبيق جميع الأنماط على document
整个
. بمعنى آخر،受外界影响
وقد يتم覆盖
.
4.3.2 ViewEncapsulation.Emulated
import { Component, ViewEncapsulation } from '@angular/core'; @عنصر({ المحدد: "تطبيقي"، ...، التغليف: ViewEncapsulation.Emulated // لا شيء | }) فئة التصدير AppComponent { الاسم: سلسلة = 'Semlinker'؛ }
نتيجة الإعداد ViewEncapsulation.Emulated
هي عدم وجود Shadow DOM
، ولكن يتم تغليف المكون من خلال样式包装机制
التي توفرها Angular
بحيث不受外部影响
. على الرغم من أن النمط لا يزال مطبقًا على整个document
، إلا أن Angular يقوم بإنشاء محدد [_ngcontent-cmy-0]
للفئة .greet
. يمكن ملاحظة أن为组件定义的样式,被Angular 修改了
. من بينها، يتم استخدام _nghost-cmy- 和_ngcontent-cmy-
实现局部的样式
.
4.3.3 ViewEncapsulation.ShadowDom
import { Component, ViewEncapsulation } from '@angular/core'; @عنصر({ المحدد: "تطبيقي"، ...، التغليف: ViewEncapsulation.ShadowDom // لا شيء | }) فئة التصدير AppComponent { الاسم: سلسلة = 'Semlinker'؛ }
نتيجة إعداد ViewEncapsulation.ShadowDom
هي استخدام ميزة Shadow DOM
الأصلية. Shadow DOM 形式渲染
الذي يدعمه المتصفح.