You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PrimeNG复选框组结合响应式表单:如何获取所有选中值?

问题:PrimeNG复选框组无法正确收集选中值为数组

一组共享name与formControlName属性的<p-checkbox>元素,表单控件预期返回选中值的数组,但目前仅能记录最后点击的复选框的值。

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>

解决方案

问题出在PrimeNG <p-checkbox>的默认配置上:组件默认binary="true",此时控件会以布尔值形式返回状态,而非将选中项的value加入数组。当多个复选框绑定同一个FormControl时,每次点击都会覆盖之前的值,最终仅保留最后一次操作的结果。

只需给每个<p-checkbox>添加binary="false"属性,即可让组件切换到非二进制模式,自动将选中项的value收集到绑定的数组FormControl中:

修改后的单个复选框示例:

<p-checkbox
  name="group1"
  value="New York"
  formControlName="selectedCities"
  inputId="ny"
  binary="false"
></p-checkbox>

全部修改后,<p-checkbox>组会正确将所有选中的城市名称收集到selectedCities数组中,页面下方的循环也会正确渲染所有选中项。

内容的提问来源于stack exchange,提问作者Vladimir Makhnovsky

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 05:13:18