gpt4 book ai didi

javascript - 子窗体脏时从父组件访问子组件

转载 作者:行者123 更新时间:2023-11-30 15:16:20 25 4
gpt4 key购买 nike

我已经创建了一个挂起的更改 guard ,如果对表单进行了更改并在离开之前警告我的用户,它会提醒我的用户。

一切正常,但我在页面上有一个使用选择器呈现的子组件,该组件也有一个表单。

我如何从我的 guard 那里访问这个表格来检查表格是否有问题?

守卫:

import { CanDeactivate } from '@angular/router';
import { FormGroup } from '@angular/forms';
import { DialogService } from "ng2-bootstrap-modal";
import { ConfirmComponent } from '../components/confirm/confirm.component';
import { Inject } from '@angular/core';

export interface FormComponent {
form: FormGroup;
}

export class PreventUnsavedChangesGuard implements CanDeactivate<FormComponent> {

constructor(@Inject(DialogService) private dialogService: DialogService) { }

canDeactivate(component: FormComponent): Promise<boolean> {

if (component.form.dirty) {
return new Promise<boolean>((resolve, reject) => {

this.dialogService.addDialog(ConfirmComponent, {
title: 'Unsaved Changes',
message: 'You have unsaved changes. Are you sure you want to navigate away?'
})
.subscribe((isConfirmed) => {
return resolve(isConfirmed);
});
});
}

return Promise.resolve(true);
}
}

最佳答案

将父表单作为输入传递给子组件。然后子组件需要将输入字段绑定(bind)到该表单。如果 child 的输入字段变脏,那么父表单也会变脏。所以你不需要在你的守卫中访问子表单。例如,

父组件 ts

import {FormBuilder, FormGroup} from "@angular/forms";
private addEmailItemForm : FormGroup;
export class ParentComponent implements OnInit, OnDestroy {

constructor(private _fb: FormBuilder) {}

ngOnInit() {
this.parentComponentForm = this._fb.group({});
}
}

父组件的 HTML

<child-component
[parentForm]="parentComponentForm"
</child-component>

子组件 ts

export class ChildComponent implements OnInit {
@Input() parentForm: FormGroup;
let inputFieldControl = new FormControl('', Validators.required);
this.parentForm.addControl(this.inputFieldControlName, inputFieldControl);
}

子组件的 HTML

<input type="text" class="form-control" [formControl]="parentForm.controls[inputFieldControlName]">

关于javascript - 子窗体脏时从父组件访问子组件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44409815/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com