在包裝輸入類型的組件時,咱們須要向外暴露數據接口,用戶輸入和輸出,這時候在組件內部定義雙向綁定,會大大方便用戶的使用。
在編寫組件以前,首先看一下組件的使用方式和效果:css
<binding-test [(userName)]="testBinding"></binding-test> <p>app.component:{{testBinding}}</p>
其中binding-test
標籤是自定義組件,利用[()]
符號進行雙向綁定,下面p
標籤顯示所綁定的值。
效果圖以下:html
binding-test
組件綁定的值顯示在網頁上。app
簡單起見,咱們建立的組件只包含一個輸入框。新建binding-test.component.html
以下:this
<label for="">UserName:</label> <input type="text" [(ngModel)]="userName" (ngModelChange)="change()">
視圖層只有一個label
和一個input
標籤,這是一個最簡單的表單。
其中ngModelChange
是當input
發生變化時,觸發的事件。spa
雙向綁定的組件須要有一個 Input
屬性和該屬性對應的Output
事件,組件類binding-test.component.ts
代碼以下:3d
import { Component, OnInit, Input, Output, EventEmitter } from '@angular/core'; @Component({ // tslint:disable-next-line:component-selector selector: 'binding-test', templateUrl: './binding-test.component.html', styleUrls: ['./binding-test.component.css'] }) /** * 自定義組件雙向數據綁定 */ export class BindingTestComponent implements OnInit { @Input() public userName; @Output() public userNameChange = new EventEmitter(); constructor() { } ngOnInit() { } /** * change */ public change(userName: string) { this.userNameChange.emit(this.userName); } }
其中主要代碼爲雙向綁定
注意:Output
中EventEmitter
類型屬性的名字必須爲Input屬性對應名字
+Change
至此,該組件便可使用相似於[(ngModel)]
語法的雙向綁定了。code