首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Angular8 ngfor FormControl

Angular8 ngfor FormControl
EN

Stack Overflow用户
提问于 2019-10-09 10:22:12
回答 2查看 2.4K关注 0票数 0

如何将mat-option绑定到control?我尝试了一些类似<mat-option *ngFor="let option of control.value" [value]="option"><mat-option *ngFor="let option of control.value['option']" [value]="option">和其他变体的东西。但还是不起作用。

代码语言:javascript
复制
<form [formGroup]="myForm">
  <ng-container *ngFor="let control of myForm.controls | keyvalue">
    <mat-form-field>
      <mat-select formControlName="{{control.key}}">
        <mat-option *ngFor="let option of options" [value]="option">
          {{option.parameter}}
        </mat-option>
      </mat-select>
    </mat-form-field>
  </ng-container>
</form>

TS

代码语言:javascript
复制
import { Component } from '@angular/core';
import { FormGroup, FormControl } from '@angular/forms';

@Component({
  selector: 'app-root',
  templateUrl: './app.component.html',
  styleUrls: ['./app.component.css']
})
export class AppComponent {

  options = [{ type: "first", parameter: "first" }, { type: "first", parameter: "first" }];
  secondOptions = [{ type: "second", parameter: "second " }, { type: "second", parameter: "second" }];
  myForm = new FormGroup({
    first: new FormControl(this.options),
    second: new FormControl(this.secondOptions)
  });

  constructor() {
    this.myForm.controls
  }
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-10-09 10:41:28

将选项保留在FormControl之外,不要将选项设置为值,您需要处理控件之外的选项。

HTML:

代码语言:javascript
复制
<form [formGroup]="myForm">
  <ng-container *ngFor="let control of myForm.controls | keyvalue">
    <mat-form-field>
      <mat-select formControlName="{{control.key}}">
        <mat-option *ngFor="let option of options[control.key]" [value]="option">
          {{option.parameter}}
        </mat-option>
      </mat-select>
    </mat-form-field>
  </ng-container>
</form>

TS。注意,我们创建了一个options对象,其属性名与控件的名称相同。

代码语言:javascript
复制
options = {
    first:  [
      { type: "first", parameter: "first" }, { type: "first", parameter: "first" }
    ],
    second: [
      { type: "second", parameter: "second " },
      { type: "second", parameter: "second" }
    ]
  }
  myForm = new FormGroup({
    first: new FormControl(),
    second: new FormControl()
  });

  constructor() {
    this.myForm.controls
  }

演示

票数 1
EN

Stack Overflow用户

发布于 2019-10-09 10:34:41

在我的注释之后,不应该将选项绑定到窗体控件。

相反,只需创建一个如下所示的二维数组:

代码语言:javascript
复制
groups = [
  { controlName: 'first', options : [{ type: "first", parameter: "first" }, { type: "first", parameter: "first" }] },
  { controlName: 'second', options : [{ type: "second", parameter: "second " }, { type: "second", parameter: "second" }] },
];

myForm = new FormGroup({
  first: new FormControl(),
  second: new FormControl()
});

然后重复一遍。

代码语言:javascript
复制
<form [formGroup]="myForm">
  <ng-container *ngFor="let obj of groups">
    <mat-form-field>
      <mat-select [formControlName]="obj.controlName">
        <mat-option *ngFor="let option of obj.options | keyvalue" [value]="option">
          {{ keyval.parameter }}
        </mat-option>
      </mat-select>
    </mat-form-field>
  </ng-container>
</form>
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58302022

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档