2017-06-28 9 views
2

私は、コントロールがFormGroup上に自分自身を登録している形成方法を逆しようとしているの結合に自分のFormControlディレクティブの結果を実装するためにFormControlDirectiveを拡張しようとするので、その代わりにが故障が

@Component({..., template: `<input [formControl]="myControl"`}  
... 

それとも

を有するの
@Component({..., template: `<input [formControName]="myControlName"`}  
... 

私は

@Component({..., template: `<input myFormControl`}  
... 

そして、私の悲惨を持つことができます私のためにFormControlを作成して追加してください。あなたが見ることができるように

最高の仕事していないようです何このPlankr

して説明するには、入力フォームのモデル値を変更しない変更、フォームモデルにビューを結合さ。

これは、がコンストラクタに注入されていないことを示しています(ベースのFormControlDirectiveクラスを直接使用する場合と異なります)。

私の最終目標は、@ViewChildren(MyFormDirective)となる親のカスタマイズされたグループコンポーネントを作成し、それらをすべて作成したフォームに動的に追加することです。

答えて

1

あなたはほぼそこにいます。しかしもう1つのトリックがあります。その入力要素にはDefaultValueAccessorがないため、コンストラクタ引数にはnullという値が設定されます。

formControl \ formControlNameセレクタは、もう1つの場所 - the value accessorに表示されます。ディレクティブを動作させるには、hybridFormControlディレクティブのすべてのデフォルト値アクセサを実装する必要があります(組み込みディレクティブのパターンに従って)。私はあなたの指示のプロバイダが

providers: [{ 
    provide: NgControl, //<-- NgControl is the key 
    useExisting: forwardRef(() => HybridFormControlDirective) 
}] 
に補正する必要があると考えてい

P.S

関連する問題