このリソースを使用して、formControlNameを複数のネストされたレベルに実装します。
Angular 2-コンポーネント内のformControlName
実際のformGroupが子のformControlNameコンポーネントの3つのコンポーネントレベル上にあるとします。
ControlValueAccessorは、Parentコンポーネントが子のすぐ隣にある場合に機能します。ただし、(祖父)フォームの上の複数のレベルは機能しません。
サービスの代替、または複数の入力/出力はありますか?それともこれらは唯一の方法ですか?
A--> Component with formGroup
B---> Component container
C---> Component container
D ---> Component with FormControlName (should pass to Component A)
コンポーネントAは、これと同様に、異なる子コンポーネントから複数のフォームコントロール名を収集します。
InputText.ts
export class InputTextComponent implements AfterViewInit, ControlValueAccessor {
@Input() disabled: boolean;
@Output() saveValue = new EventEmitter();
value: string;
onChange: () => void;
onTouched: () => void;
writeValue(value: any) {
this.value = value ? value : "";
}
registerOnChange(fn: any) {this.onChange = fn}
registerOnTouched(fn: any) {this.onTouched = fn}
setDisabledState(isDisabled) {this.disabled = isDisabled}
}
InputText.html
<input .. />
これはあなたが探しているものだと思います
stackblitzの例に従ってください
3つのコンポーネントを作成しましたcomp1
comp2
comp3
appModule
で登録フォームを作成し、formGroup
をcomp1
=> comp2
=> comp3
に渡しました
comp3
でformControl
プロパティのage
を作成してバインドしました。 age
の値をcomp3
から変更すると、親コンポーネント、つまりappComponent
に反映されます。
お役に立てれば!
乾杯!