@Component
デコレータ1.1 @Component
デコレータの目的
コンポーネントを宣言する場合、コンポーネント クラスで @Component デコレータを使用して、これがコンポーネントであることを Angular に伝える必要があります。 [関連チュートリアルの推奨事項: "angular チュートリアル"]
import { Component, OnInit } from '@angular/core'; @成分({ セレクター: 'app-product-alerts', templateUrl: './product-alerts.component.html', styleUrls: ['./product-alerts.component.css'] }) エクスポート クラス ProductAlertsComponent は OnInit {を実装します。 コンストラクター() { } ngOnInit() { } 1.2
@Component @Component
の共通オプション
@Component
デコレータはDirective
から継承します。この CSS セレクタは、テンプレート内のディレクティブをマークし、ディレクティブのインスタンス化をトリガーするために使用されます。
1.2.1继承自@Directive装饰器的选项
タイプ | 説明 | セレクター |
---|---|---|
string | css | セレクター名。テンプレート内のディレクティブ (コンポーネント) をマークし、そのインスタンス化 |
入力を | トリガーするために使用されます。string[] | Angular は、変更検出中に入力プロパティを自動的に更新します。 inputs 属性は、directiveProperty から bindingProperty までを指す一連の構成項目を定義します。 · directiveProperty は、値が書き込まれるディレクティブ内のプロパティを指定するために使用されます。 · bindingProperty は、値を読み取る DOM プロパティを指定するために使用されます。 bindingProperty が指定されていない場合は、directiveProperty と同じであるとみなされます。 |
出力 | string[] | イベント バインディングの出力プロパティのセット。出力プロパティがイベントを発行すると、イベントにアタッチされたテンプレート内のハンドラーが呼び出されます。各出力プロパティは、directiveProperty を bindingProperty にマップします。 · directiveProperty は、イベントを発行するコンポーネントのプロパティを指定します。 · bindingProperty は、イベント ハンドラーが付加される HTML 属性を指定します。 |
Provides | Provider[] | サービス プロバイダーのコレクション |
exportAs | string | このディレクティブをテンプレート内の変数に割り当てるために使用できる 1 つ以上の名前。複数の名前がある場合は、カンマで区切ってください。 |
queries | {[key:string]:any} | は、このディレクティブに挿入されるいくつかのクエリを構成します。コンテンツ クエリは、ngAfterContentInit コールバックを呼び出す前に設定されます。 ビュー クエリは、ngAfterViewInit コールバックを呼び出す前に設定されます。 |
jit | true | true の場合、命令/コンポーネントは AOT コンパイラによって無視されるため、常に JIT コンパイルされます。このオプションは将来の Ivy コンパイラをサポートするためのもので、まだ効果はありません。 |
host | {[key:string]:string} | は、一連のキーと値のペアを使用して、クラス プロパティをホスト要素バインディング (プロパティ、属性、イベント) にマップします。 Angular は、変更検出中にホスト プロパティ バインディングを自動的にチェックします。 バインドされた値が変更されると、Angular はディレクティブのホスト要素を更新します。キーがホスト要素のプロパティである場合、プロパティ値は指定された DOM 属性に伝播されます。キーが DOM 内の静的属性である場合、属性値はホスト要素で指定されたプロパティに伝播されます。イベント処理の場合: · そのキーは、命令がリッスンする必要がある DOM イベントです。 グローバル イベントをリッスンするには、イベント名の前にリッスンするターゲットを追加します。 ターゲットはウィンドウ、ドキュメント、または本文です。 · その値は、イベントの発生時に実行されるステートメントです。このステートメントが false を返した場合、この DOM イベントのPreventDefault 関数が呼び出されます。 このステートメントでローカル変数 $event を参照して、イベント データを取得できます。 |
1.2.2 @Component自己特有的选项
オプション | の種類の | 説明 | |
---|---|---|---|
changeDetection | ChangeDetectionStrategy | コンポーネントがインスタンス化されると、Angular はコンポーネントの各バインディング値の変更を伝播する役割を担う変更検出器を作成します。 ポリシーは次のいずれかの値です。 · ChangeDetectionStrategy#OnPush(0) は、戦略を CheckOnce (オンデマンド) に設定します。 · ChangeDetectionStrategy#Default(1) は、戦略を CheckAlways に設定します。 | |
viewProviders | Provider[] は、 | ビューの各子ノードで使用できる一連の注入可能なオブジェクトを定義します。 | |
moduleId | 文字列には、 | コンポーネントを含むモジュールの ID が含まれます。コンポーネントは、テンプレートとスタイルシートで使用される相対 URL を解決できなければなりません。 SystemJS は、すべてのモジュールの __moduleName 変数をエクスポートします。 CommonJS では、これを module.id に設定できます。 | |
templateUrl | 文字列 | コンポーネント テンプレート ファイルの URL。提供されている場合は、インライン テンプレートを提供するためにテンプレートを使用しないでください。 | |
テンプレート文字 | 列 | コンポーネントのインライン テンプレート | 。指定されている場合は、templateUrl を使用してテンプレートを指定しないでください。 |
styleUrls | string[] | このコンポーネントの CSS スタイル シートを含むファイルを指す 1 つ以上の URL。 | |
スタイル | string[] | このコンポーネントで使用される 1 つ以上のインライン CSS スタイル。 | |
アニメーション | any[] | いくつかの state() およびtransition() 定義を含む、1 つ以上のアニメーションtrigger() 呼び出し。 | |
encapsulation | ViewEncapsulation | は、テンプレートと CSS スタイルで使用されるスタイルのカプセル化戦略です。値は次のとおりです。 · ViewEncapsulation.ShadowDom: Shadow DOM を使用します。 Shadow DOM をネイティブにサポートするプラットフォームでのみ動作します。 · ViewEncapsulation.Emulated: シムされた CSS を使用してネイティブの動作をエミュレートします。 · ViewEncapsulation.None: カプセル化なしでグローバル CSS を使用します。 指定しない場合、値は CompilerOptions から取得されます。デフォルトのコンパイラ オプションは ViewEncapsulation.Emulated です。ポリシーが ViewEncapsulation.Emulated に設定されており、コンポーネントでスタイルまたは styleUrls が指定されていない場合、自動的に ViewEncapsulation.None に切り替わります。 | |
interpolation | [string, string] | は、補間式のデフォルトの開始区切り文字と終了区切り文字をオーバーライドします ({ { および }}) | |
entryComponents | Array<Type | any[]> | |
prepareWhitespaces | boolean | true の場合は保持され、false の場合は、コンパイルされたテンプレートから余分な空白文字が削除される可能性があります。 空白文字は、JavaScript 正規表現の s に一致する文字です。コンパイラ オプションでオーバーライドしない限り、デフォルトは false です。 |
selector
セレクターは、次のいずれかの形式を使用できます。
element-name
:[attribute]
を選択:.class
選択: クラス名に基づいて [属性=値] を選択not(sub_selector)
: 要素がサブセレクターと一致しない場合のみ selector1、selector2 を選択します sub_selectorselector1, selector2
または selector2 がelement-name
と一致するかどうかにかかわらず、 2.1が選択されます: select
@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.component.html', styleUrls: ['./element.component.css'] })
<div class="app-element"></div>
host
: {[key:string]:string}
一連のキーと値のペアを使用して、クラスのプロパティをホストのバインディングにマッピングします。要素 (プロパティ、属性、イベント)。
Angular は、変更検出中にホスト プロパティ バインディングを自動的にチェックします。 バインドされた値が変更されると、Angular はディレクティブのホスト要素を更新します。
イベント処理用のコンポーネント内で変数を直接定義できます。
3.1 attribute
とproperty
類似点と相違点:
dom 的property
ため、angular2 の双向
バインディングの実装は、 dom 的property
ので、命令はプロパティにバインドされますが、場合によっては、colspan、rowspan などのプロパティが存在しません。HTML タグのプロパティをバインドしたい場合は、 attr
:
<table を使用する必要があります。
width="100%" border="10px ソリッド"> <tr> <th>月</th> <th>節約</th> </tr> <tr> <td [attr.colspan]=colnum>1 月</td> </tr> <tr> <td [attr.colspan]=colnum>2 月</td> </tr> </テーブル> letcolnum:number = 2;
3.2 host
を使用してclass
をバインドする
@Component({ セレクター: '.app要素', テンプレート: './element.component.html', styleUrls: ['./element.component.css'], ホスト: { '[class.default-class]': 'useDefault' }、 encapsulation: ViewEncapsulation.None // ホスト要素にも element.component.css スタイルを使用させます。それ以外の場合は、CSS 汚染を避けるためにデフォルトでカプセルが使用されます。 }) エクスポート クラス AppElementComponent { @Input() useDefault = true; }
<div class="app-element"></div>
3.3 host
バインディングstyle
を使用する
@Component({ セレクター: '.app要素', テンプレート: './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 { パブリック onClick($event) { コンソール.ログ($event); } }
<div class="app-element"></div>
encapsulation
(encapsulation)テンプレートと CSS スタイルのスタイルのカプセル化戦略。
4.1 Web コンポーネントは、
標準化された非侵入的な方法でコンポーネントをカプセル化します。各コンポーネントは、ページ上の他の要素不会干扰
ことなく、独自の HTML 構造、CSS スタイル、および JavaScript コードを編成できます。
Web コンポーネントは、次の 4 つのテクノロジで構成されます。
4.2 Shadow DOM
<!DOCTYPE html> <html> <頭> <meta charset="UTF-8"> <title>シャドウ DOM</title> <style type="text/css"> .shadowroot_son { 色: #f00; } </スタイル> </head> <本文> <p>私はシャドウホストに属していません</p> <div>こんにちは、世界!</div> <スクリプト> // シャドウホスト varshadowHost = document.querySelector('.shadowhost'); // シャドウ ルート (シャドウ ルート) を作成します varshadowRoot =shadowHost.createShadowRoot(); // シャドウ ルートはシャドウ ツリーの最初のノードであり、p ノードなどの他のノードはその子ノードです。 shadowRoot.innerHTML = '<p>シャドウホストにいます</p>'; </script> </body> <html>
4.3 ViewEncapsulation
ViewEncapsulation では、次の 3 つのオプション値を設定できます。
4.3.1 ViewEncapsulation.None
import { Component, ViewEncapsulation } from '@angular/core'; @成分({ セレクター: 'my-app', テンプレート: ` <h4>Angular ワールドへようこそ</h4> <p class="greet">こんにちは、{{name}}</p> `、 スタイル: [` 。挨拶する { 背景: #369; 色: 白; } `]、 encapsulation: ViewEncapsulation.None // なし }) エクスポート クラス AppComponent { 名前: 文字列 = 'Semlinker';ViewEncapsulation.None を設定すると
、
ViewEncapsulation.None
Shadow DOM
がなくなり、すべてのスタイルがdocument
整个
に適用されます。つまり、コンポーネントのスタイルは受外界影响
、覆盖
可能性があります。
4.3.2 ViewEncapsulation.Emulated
import { Component, ViewEncapsulation } from '@angular/core'; @成分({ セレクター: 'my-app', ...、 encapsulation: ViewEncapsulation.Emulated // なし }) エクスポート クラス AppComponent { 名前: 文字列 = 'Semlinker';ViewEncapsulation.Emulated 設定の
結果
ViewEncapsulation.Emulated
Shadow DOM
存在しませんが、コンポーネントのスタイルは不受外部影响
ように、 Angular
が提供する样式包装机制
を通じてコンポーネントがカプセル化されます。スタイルは引き続き整个document
に適用されますが、Angular は.greet
クラスの[_ngcontent-cmy-0]
セレクターを作成します。为组件定义的样式,被Angular 修改了
がわかります。このうち、 _nghost-cmy- 和_ngcontent-cmy-
实现局部的样式
に使用されます。
4.3.3 ViewEncapsulation.ShadowDom
import { Component, ViewEncapsulation } from '@angular/core'; @成分({ セレクター: 'my-app', ...、 encapsulation: ViewEncapsulation.ShadowDom // エミュレートされません | }) エクスポート クラス AppComponent { 名前: 文字列 = 'Semlinker';ViewEncapsulation.ShadowDom 設定の
結果
ViewEncapsulation.ShadowDom
ネイティブShadow DOM
機能が使用されます。 Angular は、ブラウザーでサポートされているShadow DOM 形式渲染
ます。