AngularJS 2 Day5 了解四種DataBinding 的方式

在Angular2當中,有一個很迷人的地方,那就是DataBinding

 

傳統我們想要實現資料存取的時候我們也許會這樣做:

// html

<span id="text" > </span>  // show Hello World

//js

var span = document.getElementById('text');
span.innerHTML = "Hello World"

我們會透過DOM元素來將我們的內容透過JavaScript將內容放到Html標籤當中。

而在Angular2當中,則捨棄了DOM元素的邏輯思維。

由於已經拆成MVC的架構了,因此每一個Component都有屬於自己的css以及js

因此在使用變數上變得更加容易以及好上手。

我們可以看到Angular官方所發布的這張圖片,列出了四種DataBinding的方式:

首先是第一種

資料內崁的Binding:

我們可以透過 {{  }}的方式,將TypeScript變數的內容直接顯示在我們的Html Templete上

用法相當間單:

我們在TS的檔案當中創建一個Title的變數,並將內容設定為: Hello World

export class AppComponent  {

  constructor() { }
  Title = 'Hello World';
 }

接著我們就可以在Html Templete 當中把Title透過 資料內崁的方式,Binding到畫面上:

<span>{{Title}}</span>

如此一來資料就可以直接顯示在畫面上,完全不需要再向之前一樣利用Id去針對DOM元素去進行操作了。

接下來是第二種

屬性的Binding:

在設計系統的時候,我們很常會用到disable這個屬性

例如當CheckBox被勾選的時候,下方的textbox才允許使用者輸入。

而在以往DOM元素上我們仍然會利用Id判斷Checkbox是否有被勾選

如果有我就取得textbox控制項,並將屬性disabled設為false ; 反之設定為true。

而在Angular2當中,我們只需要這樣即可:

TypeScript:

在TS當中建立一個叫做isVisible的變數,並預設為true,代表一開始為無法輸入

並且下方撰寫一個函數,如果被呼叫時則將狀態改為false

export class AppComponent implements OnInit {

  constructor() { }
  isVisible = true;

  Change()
  { 
    this.isVisible = !this.isVisible;
  }

}

如此一來我們只需要在Html Templete當中輸入以下程式碼就可以囉!

Html:

勾選:<input type="checkbox" (click)="Change()" name="checkbox">
 <textarea rows="3" placeholder="請輸入資料"  name="SpecialHistory" [disabled]="isVisible"> </textarea>
						

那麼當checkbox被勾選的時候,自然就會將下方的textbox允許輸入了。

 

而第三種的事件Binding其實就正如上方範例所示:

我們透過 ( ) 在括號內輸入事件名稱,例如:

(click)="Change()"

就可以在TypeScript當中觸發了。

接下來是最後一種 ModelBinding ,他可以將資料與我們的TS同步做綁定

使用方式呢則是像這樣:[(ngModel)]="變數名稱"

簡單來說,不論在TS輸入什麼,或者是在Html改變了他的內容,都會同步影響到。

舉個簡單的例子:

假設我有一個輸入框,我想要將輸入的結果顯示在下方的話,那我只需要這樣做就可以了。

首先一樣在TS當中創建這個變數

export class AppComponent  {

  constructor() { }
  Title = 'Hello World';
 }

接著在Html當中:

<input type='text' [(ngModel)]="Title"/>  <!-- 利用[(ngModel)]綁定變數 -->

<div>{{Title}}</div> <!-- 將輸入結果顯示在div標籤內-->

如此一來 我們的資料就會同步輸入並且顯示在畫面上囉!

是不是很簡單又很方便呢?

接下來下一章節會帶大家來講一下 Angular2 好用的 Struct Directive

以上文章敘述如有錯誤及觀念不正確,請不吝嗇指教:)

有任何家教、案子 或技術相關問題 請都歡迎聯繫我

http://www.zhenghui.idv.tw/