我有一个包含此代码的组件:
<div class="form-group">
<label for="title">Title</label>
<input type="text" [(ngModel)]="model.title" name="title" required/>
</div>
我正在尝试将整个内容迁移到另一个组件input-component
:
@Component({
selector: 'input-component',
template: `
<div class="form-group">
<label for="title">Title</label>
<input type="text" [(ngModel)]="value" name="title" required/>
</div>
`
})
export class InputComponent {
@Input() value: string;
}
因此第一个示例代码将替换为:
<input-component [value]="model.title"></input-component>
更改model.title
时,HTML元素中的值会更改,但是当我更改元素的内容时,model.title
不会更改。
如何使用此设置实现双向数据绑定?
答案 0 :(得分:1)
我需要创建一个EventEmitter
来执行此操作:
@Component({
selector: 'input-component',
template: `
<div class="form-group">
<label for="title">Title</label>
<input type="text" [ngModel]="value" (ngModelChange)="onInput($event)" name="title" required/>
</div>
`
})
export class InputComponent {
@Input() value: string;
@Output() valueChange = new EventEmitter();
public onInput(event: string) {
this.value = event;
this.valueChange.emit(event);
}
}
答案 1 :(得分:0)
还有更好的方法,
<input-component [(value)]="model.title"></input-component>
<input type="text" [(ngModel)]="value" name="title"
(keyup)="update(value)" required/> ///<<<### keyup
export class InputComponent {
@Input() value: string;
@Output valueChange:EventEmitter=new EventEmitter(); ///<<<### added
update(value){
this.valueChange.emit(value);
}
}