2017-07-21 11 views
0

を提出我々はAngular 2 appで問題リセット入力フィールドには、これは、デバッグの問題ではありません

ための最善の解決策の概念のガイダンスを探している、私たちは」 VEの<form>

  • <form>を持っている

    • <parent-component><level-1-child>
    • を持っています
    • <level-1-child><level-2-child>
    • <level-2-child>は、私たちが行う必要がある何<textarea>

    を持っていましたか? <parent-component><form>要素をリセット

    • <button>クリックで<level-1-child> & <level-2-child>または<parent-component><form>

    ここでの提出はissue re-producible

  • +0

    FormBuilderを使用していますか? – Chrillewoodz

    +1

    子コンポーネントで@Inputを使用することができ、入力に基づいてフォームを消去することができます – Sreemat

    +0

    @Chrillewoodz私たちは今のところFormBuilderを使用していません。 – xameeramir

    答えて

    2

    FormBuilderがなければ、それは実際のリセットを行うことが難しくなっていますしかし、あなたは次のようにすることができます:

    親コンポーネント:

    <form> 
        <level-1 [val]="myVal"></level-1> 
    </form> 
    

    レベル1:

    <level-2 [val]="val"></level-2> 
    

    レベル2:

    <textarea [(ngModel)]="val.someProp"></textarea> 
    

    単にlevel-1level-2コンポーネントに@Input() val: anyを加えます。

    「リセット」するとmyValオブジェクトが元の値にリセットされます。これは子供たちにも同様に有効です。

    サイドノート:オブジェクト参照を有効にするためにオブジェクト参照を更新する必要があるかどうかは分かりませんが、必要な場合はthis.myVal = Object.assign({}, this.myVal)でそれを行うことができます。

    <form>タグにはresetFormもお電話する必要があります。だから、何かのように:

    <form #form="ngForm" (ngSubmit)="save()"></form> 
    
    @ViewChild('form') form; 
    
    save(): void { 
        this.form.resetForm() 
    } 
    

    EDIT:FormBuilder

    は、あなたがしたい:

    親コンポーネント:

    public form: FormGroup = this.fb.group({ 
        someProp: '' 
    }); 
    
    <form [formGroup]="form"> 
        <level-1 [val]="form"></level-1> 
    </form> 
    

    レベル1:

    <level-2 [val]="val"></level-2> 
    

    レベル2:その後、

    <div [formGroup]="val"> 
        <textarea formControlName="someProp"></textarea> 
    </div> 
    

    そしてthis.form.reset()でフォームをリセット。

    +0

    FormBuilderを使用してコード内のフォームをリセットする方法の例を挙げることができますか? – xameeramir

    +0

    @ xameramir完了。 – Chrillewoodz

    +0

    提案したコードを追加しましたが、[私のPlunker](https://plnkr.co/edit/dZvIOdxEb05mKtEPhbgT?p=preview) – xameeramir

    関連する問題