如何访问父组件的子组件中的 FormControl 的值



我的角度应用程序有一个父组件和几个子组件。

我的父组件中有一个"提交"按钮,该按钮已禁用 OnInit。仅当选中其中一个子组件中的复选框时,才应启用它。如果未选中该复选框,则该按钮应保持禁用状态。

这是我的父组件 HTML。如果未选中该复选框,我正在尝试禁用该按钮:

<form [formGroup]="emailForm" (ngSubmit)="onSubmit()" class="form-horizontal">
    <app-conditions (formReady)="formInitialized('conditions', $event)"></app-conditions>
    <app-damage-details-one (formReady)="formInitialized('damageDetailsOne', $event)"></app-damage-details-one>
    <app-damage-details-two (formReady)="formInitialized('damageDetailsTwo', $event)"></app-damage-details-two>
    <app-personal-info></app-personal-info>
    <app-send></app-send>
    <card>
        <card-footer>
            <button button class="axis-btn" type="submit" title="Confirm and send" data-kind="primary"
[disabled]="emailForm.conditions.acceptTerms.checked === false">Confirm and send</button>
        </card-footer>
    </card>
</form>

我尝试引用的复选框位于下面(条件.组件.html(。

我的父母中的应用程序条件是指这个孩子:

<div [formGroup]="conditionsForm">
    <card>
        <card-body>
            <div class="form-group">
                <label class="control-label" for="Accept">{{lblAccept} </label>
                <checkbox formControlName="acceptTerms" cid="Accept" heading="Accept" name="Accept" value="Accept">
                </checkbox>
            </div>
        </card-body>
    </card>
</div>

有人可以告诉我需要进行哪些更改,以便我可以根据是否选中子项中的复选框来启用/禁用父项中的按钮?多谢

使用 Angular Output 属性

根据官方角度文档:

子组件公开一个 EventEmitter 属性,当发生某些事情时,它使用该属性发出事件。父级绑定到该事件属性并对这些事件做出反应。

我使用以下代码更新了我的父组件:

<button axis-button class="axis-btn" type="submit" title="Confirm and send" data-kind="primary"
    [disabled]="emailForm.controls['conditions'].controls['acceptTerms'].value === false">Confirm
    and send</button>

现在,仅当选中子组件的复选框时,才会启用父组件按钮。

以下是选中

复选框时在子组件中捕获并在父组件中捕获的内容

更多信息:https://angular.io/guide/component-interaction

  1)@Output() change: EventEmitter<string> = new EventEmitter<string>();
    2)Also add a method that emits change when checkboxchange event occurs
        OnCheckBoxChecked(value: string) {
                this.change.emit(value);
            }

最新更新