Forms angularjs2:将字段设置为";肮脏的;,尤其是日期选择器

Forms angularjs2:将字段设置为";肮脏的;,尤其是日期选择器,forms,typescript,angular,Forms,Typescript,Angular,我不熟悉Angular2/Typescript,因为我来自Java世界,所以我决定直接学习Typescript和Angular2 我希望将大部分逻辑留在服务器上,因此不需要在客户端上进行复杂的验证管理。因此,我只希望用户填写表单,并将所有字段发布/放置到REST服务。目标是让客户端尽可能轻松 我有一张表格: <form role="form" (ngSubmit)="onSubmit()" #ArbeitstagForm="ngForm"> 因此,这会将输入的数据作为JSON通知我

我不熟悉Angular2/Typescript,因为我来自Java世界,所以我决定直接学习Typescript和Angular2

我希望将大部分逻辑留在服务器上,因此不需要在客户端上进行复杂的验证管理。因此,我只希望用户填写表单,并将所有字段发布/放置到REST服务。目标是让客户端尽可能轻松

我有一张表格:

<form role="form" (ngSubmit)="onSubmit()" #ArbeitstagForm="ngForm">
因此,这会将输入的数据作为JSON通知我,我将在发送到REST服务后将其发送给REST服务。它实际上工作得很好,但只有当我在字段中实际键入某些内容时,当我有一个默认值时,或者我使用日期选择器设置字段时,模型对象值才会保持为空

我发现了字段的脏设置,默认情况下为false,当我输入一些内容时变为true,这也是我在检查firebug时看到的,但这绝对不是我想要实现的


有没有办法在Angular2中设置表单中的所有字段?我发现Angular.js 1有很多例子,但Angular2/Typescript没有。

Control
有一个
markAsDirty()
(和
markAsTouched()
)方法


更新脏状态

我通常使用
ViewChild
获取对组件中表单的引用。有了这个参照物,我可以在需要的时候标记为“脏”或“碰”。像这样:

export class MyComponent implements OnInit, OnDestroy {
  @ViewChild('form') form: NgForm;
  ...

  public methodWithFormChange(): void {
    this.form.control.markAsDirty();
  }
}

;-)

你为什么要那样
dirty
表示用户修改了字段。是的,但仅当用户键入字段(单击字段,用键盘键入一些字符)时,但当用户单击按钮时,并且按钮/javascript函数后面的设置值(->datepicker)时,字段不会变脏,因此在我的模型对象中没有更新..我缺少一个
.control
。更新了我的答案并添加了Plunker。
model = new Arbeitstag();

onSubmit(form:any) {
  alert(JSON.stringify(this.model));return false;
}
<input #datePicker="ngForm" type="text" class="form-control pull-right" id="datepicker" [(ngModel)]="model.datum">

<button (click)="datePicker.control.markAsDirty()">update dirty status</button>
export class MyComponent implements OnInit, OnDestroy {
  @ViewChild('form') form: NgForm;
  ...

  public methodWithFormChange(): void {
    this.form.control.markAsDirty();
  }
}