Vyhledávání na webu

angular - PrimeNG skupina zaškrtávacích políček s reaktivním formulářem - Jak získat všechny zaškrtnuté hodnoty


Mám skupinu elementů <p-checkbox> (PrimeNG), všechny sdílejí atribut name a atribut formControlName. Hodnota formulářového kontrolu je pole (jak by měla být), ale „pamatuje si“ pouze poslední zaškrtnuté políčko.

TS :

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

@Component({
  selector: 'app-root',
  templateUrl: './app.component.html',
})
export class AppComponent implements OnInit {
  constructor(private formBuilder: FormBuilder) {}

  searchForm: FormGroup;

  ngOnInit() {
    this.searchForm = this.formBuilder.group({});
    this.searchForm.addControl('selectedCities', new FormControl([]));
  }
}

HTML :

<h5>Basic</h5>
<form [formGroup]="searchForm">
  <h5>Multiple</h5>
  <div class="p-field-checkbox">
    <p-checkbox
      name="group1"
      value="New York"
      formControlName="selectedCities"
      inputId="ny"
    ></p-checkbox>
    <label for="ny">New York</label>
  </div>
  <div class="p-field-checkbox">
    <p-checkbox
      name="group1"
      value="San Francisco"
      formControlName="selectedCities"
      inputId="sf"
    ></p-checkbox>
    <label for="sf">San Francisco</label>
  </div>
  <div class="p-field-checkbox">
    <p-checkbox
      name="group1"
      value="Los Angeles"
      formControlName="selectedCities"
      inputId="la"
    ></p-checkbox>
    <label for="la">Los Angeles</label>
  </div>
  <div class="p-field-checkbox">
    <p-checkbox
      name="group1"
      value="Chicago"
      formControlName="selectedCities"
      inputId="ch"
    ></p-checkbox>
    <label for="ch">Chicago</label>
  </div>
</form>

<p *ngFor="let city of searchForm.get('selectedCities').value">{{ city }}</p>

Můj projekt StackBlitz: https://stackblitz.com/edit/primeng-checkbox-demo-23nqc7?file=src%2Fapp%2Fapp.component.ts

Odpověď č. 1

Z oficiální dokumentace (sekce Model Driven Forms) se navrhuje svázat instanci formControl místo atributu formControlName.

<!-- Wrong -->
<p-checkbox formControlName="cities"></p-checkbox>

<!-- Correct -->
<p-checkbox [formControl]="myFormGroup.controls['cities']"></p-checkbox>
<p-checkbox
  name="group1"
  value="New York"
  [formControl]="searchForm.get('selectedCities')"
  inputId="ny"
></p-checkbox>

Demo @ StackBlitz