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

Angular中如何获取多个复选框的选中值

Angular 收集多个复选框选中值实现方案

首先注意:你的原始代码中所有复选框的id都是check-4,这不符合HTML规范,每个元素的id必须唯一,否则label的for属性无法正确绑定到对应复选框,点击标签时会出现异常,需要先将id修改为唯一值(比如check-1、check-2、check-3),同时label的for属性对应修改。

下面提供两种Angular中常用的实现方式:

方式一:模板驱动表单(手动处理选中状态)

组件类代码

import { Component } from '@angular/core';

@Component({
  selector: 'app-checkbox-demo',
  templateUrl: './checkbox-demo.component.html'
})
export class CheckboxDemoComponent {
  // 存储选中值的变量
  temp: number[] = [];

  // 处理复选框选中/取消事件
  onCheckboxChange(event: Event, value: number) {
    const checkbox = event.target as HTMLInputElement;
    if (checkbox.checked) {
      // 选中时添加值到数组
      this.temp.push(value);
    } else {
      // 取消选中时从数组移除对应值
      const index = this.temp.indexOf(value);
      if (index !== -1) {
        this.temp.splice(index, 1);
      }
    }
  }
}

模板HTML代码

<!-- 修正id和for属性,绑定change事件 -->
<input type="checkbox" id="check-1" name="checkbox" value="1" (change)="onCheckboxChange($event, 1)">
<label for="check-1"><span>1</span></label>

<input type="checkbox" id="check-2" name="checkbox" value="2" (change)="onCheckboxChange($event, 2)">
<label for="check-2"><span>2</span></label>

<input type="checkbox" id="check-3" name="checkbox" value="3" (change)="onCheckboxChange($event, 3)">
<label for="check-3"><span>3</span></label>

<!-- 可选:展示选中结果 -->
<p>当前选中值:{{ temp }}</p>

方式二:响应式表单(推荐,更符合Angular表单规范)

第一步:导入响应式表单模块

在你的模块文件(比如app.module.ts)中导入ReactiveFormsModule:

import { NgModule } from '@angular/core';
import { ReactiveFormsModule } from '@angular/forms';
import { BrowserModule } from '@angular/platform-browser';

import { AppComponent } from './app.component';
import { CheckboxDemoComponent } from './checkbox-demo/checkbox-demo.component';

@NgModule({
  declarations: [AppComponent, CheckboxDemoComponent],
  imports: [BrowserModule, ReactiveFormsModule], // 添加ReactiveFormsModule
  providers: [],
  bootstrap: [AppComponent]
})
export class AppModule { }

组件类代码

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

@Component({
  selector: 'app-checkbox-demo',
  templateUrl: './checkbox-demo.component.html'
})
export class CheckboxDemoComponent implements OnInit {
  checkboxForm: FormGroup;
  temp: number[] = [];

  constructor(private fb: FormBuilder) {
    // 初始化表单,用FormControl存储选中值数组
    this.checkboxForm = this.fb.group({
      checkboxes: this.fb.control([])
    });
  }

  ngOnInit(): void {
    // 监听表单值变化,自动同步到temp变量(将字符串值转为数字)
    this.checkboxForm.get('checkboxes')?.valueChanges.subscribe(selectedValues => {
      this.temp = selectedValues.map((val: string) => parseInt(val, 10));
    });
  }
}

模板HTML代码

<!-- 绑定表单组 -->
<form [formGroup]="checkboxForm">
  <input type="checkbox" id="check-1" name="checkboxes" value="1" formControlName="checkboxes">
  <label for="check-1"><span>1</span></label>

  <input type="checkbox" id="check-2" name="checkboxes" value="2" formControlName="checkboxes">
  <label for="check-2"><span>2</span></label>

  <input type="checkbox" id="check-3" name="checkboxes" value="3" formControlName="checkboxes">
  <label for="check-3"><span>3</span></label>
</form>

<!-- 可选:展示选中结果 -->
<p>当前选中值:{{ temp }}</p>

两种方式都能实现需求:当选中1和2时,temp变量会变成[1,2]。响应式表单方式更易于维护复杂表单逻辑,推荐使用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 17:47:08