【问题标题】:For every option different selection [formControl]对于每个选项不同的选择 [formControl]
【发布时间】:2021-11-05 08:29:29
【问题描述】:

我正在尝试实现一个创建 mat-form-field 的按钮

days = new FormControl();
daysList: string[] = ['Monday', 'Thuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday'];


openExecutionTimeScheduler() {
  let now = new Date();

  this.weekDayAndTime.weekDay = []

  var weekday = new Array(7);
  weekday[0] = "Sunday";
  weekday[1] = "Monday";
  weekday[2] = "Tuesday";
  weekday[3] = "Wednesday";
  weekday[4] = "Thursday";
  weekday[5] = "Friday";
  weekday[6] = "Saturday";
  this.weekDayAndTime.weekDay.push(weekday[now.getDay()])
  this.days.setValue(this.weekDayAndTime.weekDay)
}
<div style="display:flex; flex-direction:row" class="m-portlet__body" *ngFor="let time of times; let i = index;">

  <mat-form-field appearance="outline">
    <mat-label>Days Of Week</mat-label>
    <mat-select [formControl]="days" multiple>
      <mat-option *ngFor="let day of daysList" [value]="day">{{day}}</mat-option>
    </mat-select>
  </mat-form-field>
</div>

当我创建一个新项目时,它会覆盖已选择的字段并将工作日设置为今天的工作日。如何使项目彼此独立?因此,如果我创建一个 mat-form-field,它会预先选择今天作为默认日期,如果我选择另一天,它不会覆盖以前的 mat-form-fields

【问题讨论】:

    标签: javascript angular typescript angular-material


    【解决方案1】:

    您应该使用FormArray

    例子

    <ng-container formArrayName="days">
      <ng-container *ngFor="let daysForm of days.controls; let i = index">
          <div class="days-form-row" [formGroup]="daysForm">
            <mat-form-field appearance="outline">
              <mat-label>Days Of Week</mat-label>
              <mat-select [formControl]="weekday" multiple>
                <mat-option *ngFor="let day of daysList" [value]="day">{{day}}</mat-option>
              </mat-select>
            </mat-form-field>
          </div>
      </ng-container>
    </ng-container>
    

    表单设置

    form = this.fb.group({
      // other form controls,
      days: this.fb.array([])
    });
    
    constructor(private fb:FormBuilder) {}
    
    get days() {
      return this.form.controls["days"] as FormArray;
    }
    

    添加课程

    addDayControl() {
      const dayForm = this.fb.group({
        weekday: ['Sunday', Validators.required]
      });
      this.days.push(dayForm);
    }
    

    【讨论】:

    • 感谢您的回答!当我使用您的代码时,我收到以下错误:错误:formArrayName 必须与父 formGroup 指令一起使用。您需要添加一个 formGroup 指令并将一个现有的 FormGroup 实例传递给它(您可以在您的类中创建一个)。这是一个堆栈闪电战stackblitz.com/edit/angular-4rvjkd?file=src/app/…。我该如何解决?
    • &lt;div class="add-days-form" [formGroup]="form"&gt;包装它更多细节请阅读:blog.angular-university.io/angular-form-array
    猜你喜欢
    • 2017-02-11
    • 2020-08-05
    • 2011-07-04
    • 1970-01-01
    • 2022-11-05
    • 1970-01-01
    • 2013-10-16
    • 1970-01-01
    • 2014-07-01
    相关资源
    最近更新 更多