我怎么能有自定义的双向数据绑定使表单变脏

时间:2017-10-31 11:04:03

标签: javascript angular data-binding

我用双向数据绑定创建了一个组件

class MyCustom2Way{
      @Input() text: string;
      @Output() textChange = new EventEmitter<string>();
      // MyCustom2Way has something in the template that will 
      // trigger testChange.emit when user interacts with it
}

现在假设我使用MyCustom2Way这样的形式:

<form action="" #myForm="ngForm">
  <my-custom-2-way [(text)]="model.field" name="field"></my-custom-2-way>
</form>

当用户使用MyCustom2Way进行迭代时,如何让myForm变为MyCustom2Way

2 个答案:

答案 0 :(得分:1)

您应该使用ngModel和自定义ControlValueAccessor,否则表单对您的组件一无所知,因此不会将其标记为脏。 [(text)]="model.field" - 只是语法糖。

答案 1 :(得分:1)

您可以将表单传递给my-custom-2-way组件,如下所示

<my-custom-2-way [(text)]="model.field" name="field" [form]="myForm"></my-custom-2-way>

然后在我的自定义组件

class MyCustom2Way{
      @Input() text: string;
      @Output() textChange = new EventEmitter<string>();
      // MyCustom2Way has something in the template that will 
      // trigger testChange.emit when user interacts with it
      @Input Form:any 
      this.form._pristine=true;
}