简体   繁体   English

Angular:仅一种形式的多个字段ControlName,反应形式

[英]Angular: multiple fields in just one formControlName, reactive form

Is it possible to bind more than one field in just one formControlName , or do something similar to get the same result? 是否可以仅在一个formControlName绑定多个字段,或者做类似的事情以得到相同的结果? I tried this but each select overwrites another. 我试过了,但是每个选择都会覆盖另一个选择。

Here a stackbliz exemple: https://stackblitz.com/edit/angular-tjgycw?file=src/app/app.component.html 这是一个stackbliz示例: https ://stackblitz.com/edit/angular-tjgycw ? file = src/app/app.component.html

It is not possible to have form control names with shared model. 表单控件名称不能与共享模型一起使用。

But in your case you can merge control models like this: 但是您可以合并这样的控制模型:

TS TS

import { Component, OnInit } from '@angular/core';
import { FormBuilder, FormGroup, FormControl } from '@angular/forms'

@Component({
  selector: 'my-app',
  templateUrl: './app.component.html',
  styleUrls: ['./app.component.css']
})
export class AppComponent implements OnInit {
  name = 'Angular';
  acessoForm: FormGroup;
  listaPermissoes: any[];

  constructor(
    private builder: FormBuilder,
  ) {

  }

  ngOnInit() {

    this.listaPermissoes = [
      {
        "id": 2,
        "nome": "grupo.perm.cadeira",
        "permissoes": [
          {
            "id": 6,
            "nome": "perm.cadastrarCadeira"
          },
          {
            "id": 7,
            "nome": "perm.alterarCadeira"
          },
        ]
      },
      {
        "id": 4,
        "nome": "grupo.perm.mesa",
        "permissoes": [
          {
            "id": 15,
            "nome": "perm.cadastrarMesa"
          },
          {
            "id": 16,
            "nome": "perm.alterarMesa"
          },
        ]
      }]

    this.acessoForm = this.builder.group(
      this.listaPermissoes.map((item, index) => `permissoes-${index}`)
        .reduce((pre, curr) => { 
          pre[curr] = [[]]; 
          return pre; }, {}), {});
  }

  selectedPermissoes(){
    return [].concat(...Object.values(this.acessoForm.value));
  }


}

HTML HTML

<form [formGroup]="acessoForm">
    <div *ngFor="let listaPermissao of listaPermissoes; let i = index">
        <div class="col-md-6">
            <p>{{listaPermissao.nome}}</p>
        </div>

        <div class="col-md-6">

            <select class="form-control" [formControlName]="'permissoes-'+i" multiple>
                                      <option *ngFor="let permissao of listaPermissao.permissoes" [ngValue]="permissao">{{permissao.nome}}</option>
                                    </select>
        </div>
    </div>
</form>
<pre>{{selectedPermissoes() | json}}</pre>

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 Angular pipe 与 angular 表单数组的反应 formControlName - Angular pipe with reactive formControlName of angular form array Angular 7:在角度反应形式中找不到名称为 formControlName 的控件 - Angular 7: Cannot find control with name: formControlName in angular reactive form Angular formControlName - 反应形式 - 将值设置为 primeNg p-dropdown - Angular formControlName - reactive form - Setting values to primeNg p-dropdown Angular 6 只需要许多字段中的一个字段 Reactive Form - Angular 6 Required only one field from many fields Reactive Form 具有动态字段的 Angular Reactive Form - Angular Reactive Form with dynamic fields 用于输入类型文件的反应式上传表单的 Jest 测试用例<input type="file" formControlName="userslist"> (角 7) - Jest Test Case for reactive upload form for input type file <input type="file" formControlName="userslist"> (Angular 7) Angular 将可观察数据修补到反应式表单字段 - Angular patch observable data to reactive form fields Angular 具有来自数组的动态字段的反应式表单 - Angular Reactive Form with dynamic fields from array 故障单元测试角度的反应形式字段 - trouble unit testing reactive form fields in angular 如何获取值在 Angular 中更改的字段的 FormControlName 反应 forms - How to get FormControlName of the field which value changed in Angular reactive forms
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM