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

Angular中如何将自定义组件内mat-checkbox的change事件暴露给父组件

实现方案

第一步:修改子组件(CheckboxFilterComponent)逻辑

首先在组件类中引入输出事件需要的依赖:

import { Component, forwardRef, Output, EventEmitter } from '@angular/core';

完善组件类逻辑,新增对外输出事件和触发逻辑:

export class CheckboxFilterComponent extends FilterComponent {
  // 对外输出的变更事件,会抛出最新的过滤器状态
  @Output() filterChange = new EventEmitter<FilterState>();

  constructor() {
    super();
  }

  getState(): FilterState {
    return {
      name: this.name,
      value: this.values
        .filter((value) => value.active)
        .map((value) => value.value),
    };
  }

  // 模板中已绑定的ngModelChange触发方法,在这里对外抛出变更事件
  emitState() {
    const latestFilterState = this.getState();
    this.filterChange.emit(latestFilterState);
    // 如果父类FilterComponent原有emitState逻辑,保留调用即可:super.emitState()
  }
}

原组件模板代码无需修改,已经存在(ngModelChange)="emitState()"的触发绑定。

第二步:父组件(search-page)绑定监听事件

修改父组件模板中组件调用代码,绑定新增的filterChange事件:

<my-checkbox-filter 
  name="checkbox" 
  [values]="checkBoxValues"
  (filterChange)="isChange($event)"
></my-checkbox-filter>

完善父组件的监听方法,接收的参数即为当前过滤器的最新状态:

// 入参state包含当前过滤器的name和已选中的value数组
isChange(state: FilterState) {
  console.log("filter is changed", state)
} 

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 01:24:05