我有一个组件,里面有4-5个组件。如果没有选中或填充表单的任何强制字段,我希望禁用保存按钮。
<p-tabView>
<p-tabPanel header="General" [selected]="true">
<data-general [data]="data" (modalSave)="childData($event)">
</data-general>
</p-tabPanel>
<p-tabPanel header="Additional" *ngIf="this.isEditData">
<data-additional [data]="data" (modalSave)="additionalValid($event)">
</data-additional>
</p-tabPanel>
<p-tabPanel header="Test" *ngIf="this.isEditData">
<test-component></test-component>
</p-tabPanel>
<p-tabPanel header="Test2" *ngIf="this.isEditData">
<data-test2></data-test2>
</p-tabPanel>
</p-tabView>
<button type="submit" class="btn btn-primary"
[disabled]="!isFormValid()" (click)="onSubmitBtnClick()">Save</button>我尝试实现方法isFormValid,定义和检查属性以检查每个表单的有效性。但我做不到。
data-general、data-additional、test-component和data-test2是子组件。
发布于 2017-09-26 09:01:22
我已经解决了这个问题,张贴我的解决方案,以便它可以帮助其他人。
指令:
import { Directive } from "@angular/core";
import { NgForm, ControlContainer } from '@angular/forms';
@Directive({
selector: '[provide-parent-form]',
providers: [
{
provide: ControlContainer,
useFactory: function (form: NgForm) {
return form;
},
deps: [NgForm]
}
]
})
export class ProvideParentForm { }父组件html:
<button type="submit" class="btn btn-primary" [disabled]="!formName.valid">Save</button>子组件html:在子组件中有一个div而不是form。
发布于 2017-09-22 09:46:57
就像这样:
data-general.component.html
<form name="dataGeneralForm" role="form" novalidate (ngSubmit)="onSubmit(dataGeneralForm)" #dataGeneralForm="ngForm">
<input type="text" class="form-control" [(ngModel)]="data.name" name="name" id="name" required />
<button type="submit">Children Button</button>
</form>data-general.component.ts
export class DataGeneralComponent {
data: any = {};
@Output() modalSave = new EventEmitter();
onSubmit(dataGeneralForm: NgForm) {
this.modalSave.next(dataGeneralForm);
}
}parent.component.html:
<p-tabView>
<p-tabPanel header="General" [selected]="true">
<data-general (modalSave)="childData($event)"></data-general>
</p-tabPanel>
</p-tabView>
<button type="submit" class="btn btn-primary" [disabled]="!parentForm?.valid">Save</button>parent.component.ts
import { NgForm } from '@angular/forms';
export class ParentComponent {
parentForm: NgForm;
childData(e) {
this.parentForm = e;
}
}https://stackoverflow.com/questions/46359266
复制相似问题