親コンポーネントの子コンポーネントに配置されたフォームの有効性をチェックしようとしています。最善のシナリオは、フォームが無効な場合は親コンポーネントのボタンを無効にするか、フォームが無効な場合は親ボタンから警告をトリガーする悪いシナリオでボタンを無効にすることです。角が4の親コンポーネントからフォームが有効であることを確認します。
私は、フォームが次のように子コンポーネントの機能を呼び出すために@ViewChildデコレータを使用して、親から「NG-無効」クラスを持っているかどうかを確認するために達成できる:
親コンポーネント:
export class CandidateVerificationComponent implements OnChanges, OnInit {
@ViewChild(RightPanelComponent) rightPanelPointer: RightPanelComponent;
saveAndFinish() {
if (this.rightPanelPointer.checkFormValidity())
{
alert('No Valid');
return;
}
this.rightPanelPointer.onSubmit();
}
}
を
子コンポーネント:
export class RightPanelComponent implements OnChanges , OnInit{
@ViewChild("candiateForm", { read: ElementRef }) tref: ElementRef;
checkFormValidity():boolean {
return (this.tref.nativeElement.className.indexOf('ng-invalid') !== -1);
}
}
それは最悪のシナリオのために動作しますが、私はDOMにコンポーネントをリンクする考えを好きではない、私は賢くアイデアというだろう。
テンプレート参照変数(#candiateForm)を使用したいとします。たとえば、親からの妥当性をチェックするためにフォーム(子)から送信ボタン(以下を参照)の有効性をチェックすることができます。親からそのテンプレート変数にアクセスすることは可能ですか?
<form (ngSubmit)="onSubmit()" #candiateForm="ngForm" name="candiateForm" (change)="formChanged()">
<div class="form-group">
<label class="control-label" for="firstName">First name:</label>
<input type="text" class="form-control" id="firstName" pattern="^[^0-9]+$" required [(ngModel)]='candidate.firstName' name="firstName" #firstName="ngModel">
</div>
<button type="submit" class="btn btn-default" [disabled]="!candiateForm.form.valid">Submit</button>
</form>
おかげさまですが、主な問題はthis.form.valid(子コンポーネント)に親コンポーネントからアクセスすることです。親からの@viewchildは、@ViewChild(RightPanelComponent)に最も興味があります。rightPanelPointer:RightPanelComponent; –
これは、親コンポーネントで 'rightPanelPointer.form.valid'を実行します –
私は持っています:プロパティフォームがRightPanelComponent型に存在しません。私のフォームがテンプレート駆動型フォームであるため、 html。 –