1. 程式人生 > >Angular2中Input和Output用法及示例

Angular2中Input和Output用法及示例

                     

對於angular2中的Input和Output可以和angularjs中指令作類比。

Input相當於指令的值繫結,無論是單向的(@)還是雙向的(=)。都是將父作用域的值“輸入”到子作用域中,然後子作用域進行相關處理。

Output相當於指令的方法繫結,子作用域觸發事件執行響應函式,而響應函式方法體則位於父作用域中,相當於將事件“輸出到”父作用域中,在父作用域中處理。

看個angular2示例吧,我們定義一個子元件,獲取父作用域的陣列值並以列表形式顯示,然後當點選子元件的元素時呼叫父元件的方法將該元素刪除。

//app.component.html<app-child [values]="data"
(childEvent) = "getChildEvent($event)"></app-child>//app.component.ts@Component({  selector: 'app-root',  templateUrl: './app.component.html',  styleUrls: ['./app.component.css']})export class AppComponent {  data = [1,2,3];  getChildEvent(index){    console.log(index);    this.data.splice(index
,1);  }}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18

以上是跟元件app-root的元件類及模板,可以我們把data輸入到子元件app-child中,然後接收childEvent事件並對其進行響應。

//app-child.component.html<p *ngFor="let item of values; let i = index" (click)="fireChildEvent(i)">  {{item}}</p>//app-child.component.ts@Component({  selector: 'app-child',  templateUrl: './child.component.html'
,  styleUrls: ['./child.component.css']})export class ChildComponent implements OnInit {  @Input() values;  @Output() childEvent = new EventEmitter<any>();  constructor() { }  ngOnInit() {  }  fireChildEvent(index){    this.childEvent.emit(index);  }}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25

子元件定義了values接收了父元件的輸入,這裡就是data值,然後使用ngFor指令顯示。

當點選每個元素的時候觸發了click事件,執行fireChildEvent函式,該函式要將元素的index值“輸出”到父元件中進行處理。

Output一般都是一個EventEmitter的例項,使用例項的emit方法將引數emit到父元件中,觸發父元件的childEvent事件。

然後父元件監聽到該事件的發生,執行對應的處理函式getChildEvent,刪除傳遞的元素索引指向的資料,同時,檢視更新。

實際效果:
這裡寫圖片描述