Angular 6 弃用 formControlName 和 ngModel 一起使用

标签 angular typescript angular6 angular-ngmodel

我有 Angular 6 项目。我一起使用 ngModel 和 formControlName 。但是 Angular 在下面给了我警告。 Forexamle 当我从网格中的按钮打开更新弹出窗口时,我可以轻松地自动绑定(bind)更新弹出窗口中的输入。但是 angular 7 说删除 ngModel。因此,我必须始终将所有内容映射到我的学生对象。最好的方法是什么?我们可以在下面的代码中赋予 formValueType 来形成像 studentObject 这样的值,然后它可以自动绑定(bind)吗?

Angular 警告:

     It looks like you're using ngModel on the same form field 
as formControlName. Support for using the ngModel input property and 
ngModelChange event with reactive form directives has been deprecated
 in Angular v6 and will be removed in Angular v7.

我的HTML
<form [formGroup]="studentForm" ??????formValueType="studentObject"?????>
  <p-dialog>
    <div class="ui-g-12 form-group">
      <div class="ui-g-4">
        <label>Name Surname</label>
      </div>
      <div class="ui-g-8">
        <input pInputText [(ngModel)]="selectedStudent.nameSurname"  formControlName="nameSurname" />
      </div>
    </div>
    <div class="ui-g-12 form-group">
      <div class="ui-g-4">
        <label>Email</label>
      </div>
      <div class="ui-g-8">
        <input pInputText [(ngModel)]="selectedStudent.email" formControlName="email" />
      </div>
    </div>
        <div class="ui-g-12 form-group">
          <div class="ui-g-4">
            <label>Age</label>
          </div>
          <div class="ui-g-8">
            <input pInputText [(ngModel)]="selectedStudent.age"  formControlName="age" />
          </div>
        </div>
      </div>
    <button type="button" pButton icon="fa fa-check" (click)="save()" label="Save"></button>
  </p-dialog>
</form>

最佳答案

ngModelformGroup真的很奇怪。您应该删除 ngModel而是绑定(bind)到 valueChanges在 fromGroup 上,然后只遍历接收到的数据并分配值。

 //somewhere where form is build
 this.studentForm.valueChanges.subscribe(data => this.onStudentFormValueChange(data));

 private onStudentFormValueChange(data) {
    this.selectedStudent.age = data.age
    this.selectedStudent.email = data.email
    this.selectedStudent.nameSurname = data.nameSurname

    // or
    for (const key in this.studentForm.controls) {
       const control = this.studentForm.get(key);
       this.selectedStudent[key] = control.value
    }
}

关于Angular 6 弃用 formControlName 和 ngModel 一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52641557/

相关文章:

angular - 如何在 Angular 错误上获得更好的堆栈跟踪

javascript - 为相位器游戏添加 requirejs 后未调用 Typescript window.onload

visual-studio-2017 - core/src/render3/interfaces 中的 Angular 构建错误

Angular - 自定义 ngx-bootstrap Typeahead 以根据以逗号分隔的多个值自动完成

angular - 将 FormArray 设置为 FormGroups 数组

node.js - "Npm ls"显示损坏的依赖关系。怎么解决?

javascript - 带有必需参数的 typescript 解构

sql-server - 如何在 Angular 6 中使用 Sql 服务器连接?

javascript - 如何将jpeg字符串转换为base64

javascript - 使用 api 显示列表的 Angular 8 问题