3つのWebフロントエンドフレームワークは6.0(A)の角度初日読むためにクリックして_angular.js
ニックネームを、角度は、ビデオのフルセットは、チュートリアルの受信
、アンギュラ6.0
1.1スタイル
のラインで、チェーンの外に、埋め込まれた:HTMLスタイルで導入を。
コンポーネントのNG6スタイルも3通りの方法で組み込まれています。
チェーン外
NG6は、プリコンパイル言語の設定CSS出てきたので、我々はそれらを直接使用することができます
styleUrlsスタイルファイル、アレイを導入することにより、コンポーネントクラスの注釈は、複数のファイルを導入してもよいです
あなたは.cssファイルを導入した場合は、CSSの構文は次のとおりです。
受信ファイルが.lessである場合には、以下の文法であります
あなたが.scssファイルを導入した場合、構文は次のとおりです.scss
...
どのようなファイル、我々は、アセンブリの命名規則、名前.componnetを遵守しなければなりません。展開します
内嵌式
スタイルパターンを導入することにより、コンポーネントクラスのアノテーションは、アレイ、スタイルを複数定義することができるされています
インラインスタイル
私たちは、インラインスタイル属性文字列式を定義することができます
注:組み込みスタイルスタイルと外側のチェーンスタイルstyleUrls、両方ではありません
影DOMスタイル
NG6シャドウDOMスタイルスタイルスタイル内部コンポーネントを達成するため、外部の要素アセンブリに適用されていません
1 //チェーンスタイル外
2 styleUrls:[ './app.component.less'、' ./app.component.scss'、」./app.component.css']、
3 //インラインスタイル
4つのスタイル:[
5 `
6つのH1 {
7色:ピンク。
8}
9 `
10]
1.2ダイナミックなスタイルを設定し
、2つの構文を持って、我々は動的にスタイルすることができ、NG6に
最初の[スタイル。スタイル名] =「スタイル値」
あなただけのCSSの注入を避けるために、スタイルを設定することができます
次の[ngStyle] = "{}"
ここでのコマンドがあるngStyle
あなたが複数のスタイルを追加することができますたびに、オブジェクトの属性名は、名前のラクダします
JSの属性値は、使用を可変とすることができる環境2つの方法があり、引用符で囲んだ文字列
私たちは、コンポーネントクラスでは、これらのデータを定義することができます
注:両方の方法括弧で使用され、ブラケットしたがってNG6糖衣構文であるが、役割は、動的プロパティを設定することで、エレメントのすべてのプロパティを使用することができる[]構文糖(命令を含むについては後述します)
1つのテンプレート: `
2 <H1 [タイトル] = "タイトル" [style.color] = " '赤'" [style.background] = "色" [ngStyle] = "{
3のfontSize: '100pxに'
4高さ: '200pxの'
5}「>アショカ教室</ H1>
6 <H2> {{タイトル}}、{{color.toUpperCase()}} </ H2>
7 `、
1.3補間は、
テンプレート要素内のデータコンポーネントを使用したい、我々はJS環境が補間することによって達成することができます必要があります
構文{} {}
あなたが表現JSを使用できるように補間構文は、JS環境を提供します
1.4イベント
VUEに:@ ")(FN =をクリックします "
反応:のonClick = "FNを()"
NG6イベントをバインド、我々は括弧シンタックスシュガーでバインド
=」FN()」を(クリック)
イベントコールバック関数はコンポーネントクラスで定義されています
デフォルトの引数は、任意のパラメータを渡すことができるどのような引数、$イベントを渡すために、イベントオブジェクトを使用していません
スコープは、コンポーネントインスタンスオブジェクトであります
スコープは、スコープを変更したい、変更することはできません、我々はコールバック関数に埋め込むことができ、この新機能の結合は、実行時に、コールバック関数は、元のスコープを変更します。
NG6、イベントがイベント委任モデルを実装していない、要素に直接結合され、イベントオブジェクトは、生のイベントオブジェクトの源であり、NG6に対応していません。
1つのテンプレート: `
2 <H1 [タイトル] = "タイトル" [style.color] = " '赤'"(クリック)= "clickDemo($イベント)">爱创课堂</ H1>
3 <H2> {{タイトル}}、{{color.toUpperCase()}} </ H2>
4 `、
1.5一時的なテンプレート変数の
NG6は、私たちは、テンプレート内で一時的な変数を定義#糖衣構文を使用することができます
構文#変数名
#私たちは、要素上で直接プロパティを追加するには、変数を定義することができます
変数を割り当てることができます(命令)
何の割り当てがない場合、(DOM要素は生命の源である、プライマルAPIオペレーションを使用する)の要素を表し、私たちは、可変要素を介してこれにアクセスすることができます
テンプレートでの一時的なテンプレート変数があり、テンプレートのレンダリングが完了すると、一時的なテンプレート変数が破壊されたので、私たちは、コンポーネントを使用することはできません
可変成分を得るために、我々は、イベントコールバック関数記憶にそれを渡すことができます
1.6イベントモディファイ
我々はキーイベントへの結合を容易にするために、キーボードイベントの修飾子を定義することができます
イベントの構文名。修飾子=「イベントのコールバック関数()」
この時点で、入力ボックスの内容を取得し、2つの方法があります
まず、イベントオブジェクトによって:e.target.value GET
一時的なテンプレート変数によって、第2、:inp.value GET
1.7変更イベント
入力要素のため、我々は、変更イベントをバインドすることができますが、生活の変化イベントのバインディングソース
トリガ更新は各ブラウザに実行されますブラウザの互換性の問題は同じではありませんされてい
例えば:それは変更イベントをトリガーする際に入力ボックスがフォーカスを失った、イベントがぼかしに似ていると思うクロム
1つのテンプレート: `
2 <H1 #titleDOM [タイトル] = "タイトル" [style.color] = " '赤'"(クリック)= "clickDemo($イベント、titleDOM)">爱创课堂</ H1>
3 <H2 [タイトル] = "titleDOM.innerHTML" [style.color] = "titleDOM.style.color"> {{タイトル}}、{{color.toUpperCase()}} </ H2>
4 `、
1.8カスタムコンポーネントは、
時には我々は、より多くのコンポーネントを必要とするので、私たちは、コンポーネントを作成する迅速、NGを経由して命令、指示を提供するコンポーネントの私達の定義を簡略化するためにカスタムコンポーネント、NG6に持っています
G成分のデモ
注:プロジェクト実行の再入力ルートディレクトリにしてください。
この時点で、私たちは4つのファイルを作成し、ファイルを追加します
四個の新しいファイル:の.css、.htmlを、.spec.ts、.TS
ファイルapp.module.tsを変更
アセンブリのグローバル宣言は、私たちはさまざまな場所でコンポーネントを使用することができます
コンポーネントが共有されることはありませんお互いの間でデータの完全に独立しています。
1つのインポートから{コンポーネント、のOnInit} '@角度/コア'。
2
3 @Component({
4セレクタ: 'APP-デモ'、
5 templateUrl: './demo.component.html'
6 styleUrls:[」./demo.component.css']
7 })
8エクスポートクラスDemoComponentは{のOnInitを実装します
9
10コンストラクタ(){}
11
12 ngOnInit(){
13}
14
15}
16
1.9コンポーネント間通信の
コンポーネントは、互いに共有されないデータの完全に独立しています。データ共有を実現するために、我々は、コンポーネント間通信を実現したいです
そのため、コンポーネント間の通信は、コンポーネント間のデータ転送が実現されます。
二つの方向が通常あります
親コンポーネントサブアセンブリへの通信
親への通信サブアセンブリの構成部品
スループット技術を提供するコンポーネントのNG6間の通信を実現するために。入力、出力リレー
通信のサブコンポーネントへ1.9.1親コンポーネントは、
通信のサブコンポーネントの親コンポーネントを達成するために、我々は、6つのステップを必要とします
最初のステップは、属性データのサブコンポーネントを追加することです
データ変数のデータならば、我々は[]シンタックスシュガーを使用することができます
ステップ2(データはより複雑であるならば、我々はデータモデルを定義する必要が)データモデルクラスを定義します。
通常、我々は.model.ts、データモデルをファイルを作成したい、モデルクラスなので、時にはあなたも.TSにファイルを定義することができます
ngのグラムクラスモデルクラスファイル名:クラスを作成します。
私たちは、ディレクトリを追加するには、モデルクラスファイルを作成します
モデルコンポーネントクラスに第三工程
第四の組み立て工程は、スループットは、入力に導入されます。
データ・スループットを受信する第五の工程は、2つの方法があります
まず、コンポーネントクラスでは、入力で受信されたスループットは、フォームの注釈を受信します
構文@Input()属性名:モデルクラス
第二に、コンポーネントベースの注釈、入力によって受信した属性データを、二段階で
受信データの最初のステップは、属性が定義されています
入力:[]
各メンバーは、属性名を表します
データのデータ構造の定義を受信アセンブリの第2ステップ、
プロパティ名:モデルクラス
ステップ6は、データを使用しています
受信したデータが格納されているので、我々は、コンポーネントオブジェクト・インスタンス上のコンポーネントを使用することができ、テンプレートで使用することができます
1 // 4は、スループットを導入します
'角度/コア@' から2インポート{コンポーネント、のOnInit、入力}。
モデルクラスに導入された3 // 3
4インポート「../models/demo」から{デモ}。
5 //にconsole.log(デモ)
6
7 @Component({
8セレクター: 'APP-inputchild'、
9 templateUrl: './inputchild.component.html'
10 styleUrls:[」./inputchild.component.css']、
11 //データを受信する2番目の方法
12の入力:[ 'データ']
13})
14のエクスポートクラスInputchildComponentは{のOnInitを実装します
5 @ 15は、データを受信し、
16 // @Input()データ:デモ。
17の//データ形式
18データ:デモ。
19コンストラクタ(){
20 // 6は、データを使用しています
21 //にconsole.log(この)
22}
23
24 ngOnInit(){
25}
26
27}
28
午後のレビュー・
スタイル
外側チェーン:styleUrls:[]
組み込み:スタイル:[]
インラインスタイル:スタイル=「」
動的な設定のスタイル
【style.color] =」」
【ngStyle] =」{}」
補間:{} {}
DOMイベント:(クリック)= "FN($イベント)"
イベント修飾子(keyup.enter)= ""
変更=」」
一時的なテンプレート変数#demo
アセンブリNG G成分のデモ
通信項目1に親コンポーネントサブアセンブリ6を使用して2モデル、3導入モデル、4入力、5登録されたデータ、
5つの登録データ
1 @Input()キー:データ。
2つの入力:[]キー:データ。
1.9.2通信に親コンポーネントサブアセンブリは、
サブアセンブリのために、データが転送される、通信中の親コンポーネントにイベントNG6機構サブアセンブリに基づいて実装されている(放電)親コンポーネントに、出力のスループットを使用する必要があります。
親コンポーネントの通信を実現するための6つのステップにサブアセンブリ
親要素の最初のステップは、サブアセンブリは、カスタムイベントの登録に
あなたは()のシンタックスシュガーを使用したいの登録カスタムイベントを、データを渡したい、我々は$イベントパラメータを渡したいです
サブアセンブリの第2のステップは、スループット出力リレー導入され
サブアセンブリ、組み込まれたカスタムイベントクラスの持つEventEmitterにおける第三のステップ
サブアセンブリにおける第四工程、装置を通るスループットは、イベントオブジェクトがインスタンス化され、2つの方法があります
イベント・オブジェクトのインスタンス化を処理することにより、第一コンポーネントクラス
@Ouput()イベント・オブジェクト=新しい持つEventEmitterの性質()
第二の二段階
注釈、イベントオブジェクトのプロパティを登録します
出力:[]
Componentクラス、イベントオブジェクトがインスタンス化されます
イベントオブジェクトのプロパティ=新しい持つEventEmitter()
ステップ5は、イベントオブジェクトのメソッドプロパティを放出し、パラメータデータは親コンポーネントに渡されることを発表しました
親コンポーネント内の第6のステップは、データを受信し、データを使用します。
1 // 2導入出力、3導入持つEventEmitter
2インポート{コンポーネント、のOnInit、出力、持つEventEmitter}角度/コア@ 'から。
3
4 @Component({
5セレクタ: 'APP-outputchild'、
6 templateUrl: './outputchild.component.html'
7 styleUrls:[」./outputchild.component.css']、
8 //イベントオブジェクトの登録プロパティの最初のステップ
9つの出力:[ 'のsendMessage']
10})
11のエクスポートクラスOutputchildComponentは{のOnInitを実装します
メッセージ・オブジェクトがインスタンス化される4 @ 12
13 // @output()のsendMessage =新しい持つEventEmitter()。
ステップ14 //インスタンス化
15のsendMessage =新しい持つEventEmitter()。
ボタンをクリックする// 16は、メッセージを送信します
17 changeColor(){
18社の// 5ニュースリリース
19 //にconsole.log(この)
20 this.sendMessage.emit({
21 //色: '赤'
22色:「グリーン」
23})
24}
25コンストラクタ(){}
26
27 ngOnInit(){
28}
29
30}
31
1.10テンプレートディレクティブ
時には我々は、我々は、テンプレートディレクティブを使用することができ、動的な要素を作成する必要があります
NG6では、命令は] [、キャメル、例えばngStyleという名前、および属性値は、命令の文字列で、jsの環境になるために、通常は砂糖の構文、例えばされています
テンプレート制御命令は、要素が複数の制御要素の兄弟を作成するに作成され、我々はテンプレートコンポーネントを使用したいです
1.10.1テンプレートコンポーネント
VUEは、テンプレート要素は、テンプレートであります
NG-テンプレートアセンブリと呼ばれる。しかしNG6で、テンプレート・コンポーネント
私たちは、テンプレートコマンドを使用すると、一般的に言えば、創造の要素を制御
通常の要素ならば、我々は糖衣構文を使用したいです*
NG-テンプレートテンプレート・コンポーネントなら、私たちは[]シンタックスシュガーを使用する必要があります
1.10.2 ngIfテンプレートディレクティブ
のVUEとvが-場合、同じコマンド、制御要素が作成されます
糖衣構文を使用する、などのdiv、H1、などの共通要素に追加する場合*
NG-テンプレートアセンブリに追加するときに使用する[]シンタックスシュガー
ngIfプロパティの値がtrueの場合、この要素が作成されます
ngIfプロパティの値がfalseの場合、この要素を削除
1.10.3複数の実行条件分岐テンプレート
V-他に、V-IFによるVUE V-ELSE-IF 定義された命令
NG6アナログswitch文、多分岐条件命令テンプレート
スイッチ(){
場合:
場合:
デフォルト:
}
NG6アナログswitch文は、多分岐命令テンプレート条件のセットを提供ngSwitch、ngSwitchCase、ngSwitchDefault
ngSwitch役割は、条件を設定することで、テンプレートディレクティブ要素が作成されている制御ので、ないていない、[]シンタックスシュガーを使用して、すべての要素
* ngSwitchCaseは、ngSwitchDefault要素が作成された制御することができますので、共通の要素のために、我々は糖衣構文を使用したいです
シンタックスシュガー*を使用して、条件を表現ngSwitchCase、プロパティ値は、引用符で囲んだ文字列jsの環境です
ngSwitchDefaultは、デフォルトの条件は、プロパティ値を設定する必要はありません表し
1 <ボタン(クリック)= "トグル()">显隐元素</ボタン>
2 <! - シンタックスシュガーを使用して共通の要素* - >
3 <H1 * ngIf = "isCreateは">アショカ教室</ H1>
4 <! - テンプレート要素を使用すると、[]シンタックスシュガーを使用します - >
5 <ngのテンプレート[ngIf] = "isCreateは">
6 <H1>アショカ教室</ H1>
7 <H2>プロのフロントエンド訓練校</ H2>
8 </テンプレート>
9 <! - タブのカスタマイズ - >
10 <時間>
11 <ボタン(クリック)= "changePage( 'ホーム')">ホームページ</ button>の表示します
12 <ボタン(クリック)= "changePage( 'リスト')">ページ表示リスト</ボタン>
13詳細页面</ボタン>显示<ボタン(クリック)= "changePage( 'defailt')">
14 <! - 条件を定義します - >
15の<div [ngSwitch] = "ページ">
16 <H1 * ngSwitchCase = " 'ホーム'">ホームページ</ H1>
17 <H1 * ngSwitchCase = "デモ">一覧ページ</ H1>
18 <H1 * ngSwitchDefault>詳細ページ</ H1>
19 </ div>
20
21
1.10.4サイクル命令テンプレート
VUE、我々はV-のための命令を使用し、ループ命令テンプレートを定義
NG6、我々はngFor定義されたテンプレートの命令サイクルを使用します
糖衣構文を使用するように、通常の要素に使用されます*
構文は、* ngFor =「データの項目を聞かせて」
キーワードの、聞かせて
項目は、(アレイの各メンバーを表すために)ループ変数を表します
我々はデータを横断する必要があり、データ
NG6において、ループ変数は、項目のみではない、ならびに
インデックスは、インデックス値を表します。
まず、それは最初のものであるかどうかを示します
最後に、それが最後のものであるかどうかを示します
でも、それが偶数であるかどうかを示します
奇数は、それが奇数であるかどうかを示します
注:コンピュータがカウントされ、人間の目から0、1からカウントされるので、
奇妙なコンピュータは、さえ参照するには、人間の目で
コンピュータは偶数、奇数は、人間の目が見ることができるということです
構文で定義されている項目テンプレート変数、他のテンプレート変数に加えて、あなたは、使用を再定義する必要があります
$インデックスとして例えば、インデックスの
私たちは今、$インデックスを使用することができます
ループ変数は、これらの変数が破壊され、サイクルの終了後は、一時的なものであるので、我々はアクセスできません。
コマンド制御複数の兄弟ngFor、我々はまた、ngのテンプレート・コンポーネントが、構文変数を使用することができます
ngForサイクル命令の声明
ngForOfは、サイクリックデータを結合することによって、
LET-項目値の定義メンバーによって
1 <! - ループのメンバー - >
2 <UL>
!3 < - <LI * ngFor = "色の項目せ、インデックスとしてのインデックスを、まず、第1 $として" [style.background] = "項目"> {{索引}} - {{アイテム}} - {{$第}} </ LI> - >
4 <! - ゼブラ - >
5 <LI * ngFor = [style.background] = "E '#eee' "色のアイテムを聞かせて、最初の最初として$; $最後として最後;でもeとOなどの奇数インデックスとしてインデックス":? '' "> {{索引}} - {{アイテム}} - {{$最初}} - {{$最後}} - {{E}} - {{O}} </ LI>
6 </ UL>
7 <H1>外部循環{{索引}} </ H1>
8 <NG-テンプレートngFor [ngForOf] = "色" のlet-項目>
9 <H1> H1 {{アイテム}} </ H1>
10 <H2> H2 {{アイテム}} </ H2>
11 </テンプレート>
1.11カスタム命令
命令NG6の3つのタイプがあります
最初のカテゴリは、コンポーネント(構成要素が本質的に命令である)であります
第二のカテゴリーは、属性型命令、例えばngStyle、ngClassです
制御要素の挙動のスタイル
同様のクラス:中VUEとngClass
プロパティは文字列であり
オブジェクトの属性値であってもよいです
属性値は配列にすることができます
例えば、コマンド構造の第三のタイプ:ngFor、ngIf、ngSwitchCase、ngSwitchDefault ...
テンプレートコマンドは、制御要素が作成されます
属性命令タイプの命令との間の構造の違い
プロパティの型のスタイルコマンド制御動作、要素を制御することはできません作成され、構造化された命令制御要素が作成されます
デフォルトのプロパティ値のすべてが、命令の文字列ですが、JS環境になることが、シンタックスシュガーの適用が異なっています
属性タイプの命令[]シンタックスシュガー
通常の命令のために使用される構造要素*糖衣構文、使用のためにNG-テンプレートアセンブリ[]シンタックスシュガー
内蔵命令より多くの機能を提供するために、限られている、我々は命令をカスタマイズしたいです
1.11.1カスタムコマンド
NGでディレクティブを作成するために、私たちを
グラムディレクティブのデモ
これは、2つのファイルを作成し、グローバルモジュールの設定ファイルを変更するには
グローバル宣言のカスタムコマンド。だから我々は、任意の位置で直接、このコマンドを使用することができます
そして、アセンブリ命令の違い
1つのファイル
コンポーネントファイルの4つのタイプがあります:.htmlを、.cssの、.TS、.spec.tsは、
命令のみ.TS、ファイルを.spec.ts、無テンプレートとスタイル
2セレクタ
デフォルトの選択コンポーネントは、カスタム要素名セレクタです
命令のデフォルトの選択は、カスタム属性セレクタです
3コメント
Componentクラスコンポーネントは、コンポーネント、スタイルやテンプレートを注入することができるです
アノテーションクラス命令は、ディレクティブです
4インタフェース
コンポーネントは、インターフェイスを実装のOnInit
interfaceコマンドを実装していないのOnInit
すべてのアセンブリ命令後、命令は、命令であります
コンポーネントは、通信命令も実装することができる、通信することができます。