在包装输入类型的组件时,咱们须要向外暴露数据接口,用户输入和输出,这时候在组件内部定义双向绑定,会大大方便用户的使用。
在编写组件以前,首先看一下组件的使用方式和效果: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