2016-05-21 14 views
0

markAsPristine()を使用してフォームを送信した後、コントロールグループの元の状態をtrueにリセットしようとしています...しかし、このようなエラーは、 "markAsPristineは関数ではありません" ...フォームを再構築したくない送信した後、私はちょうどこのmarkaspristine関数(参照https://github.com/angular/angular/pull/6679)を使用して、コントロールグループの元の状態を真にしたいと思います。ここに私のデモですhttp://plnkr.co/edit/W8Fs6O6QsMCG1AWhxzqv?p=preview ...フォームを送信した後、コントロールグループの元の状態をtrueにリセットする方法はありますか?

onsubmit(){ 
    console.log(this.model); 
    this.model.markAsPristine(); 
} 

誰かが間違っていると教えてください。

答えて

0

元のプルリクエストを読むことができるので、それはanother pull requestに移動されました。しかし、そのPRは閉鎖されました:

このPRは古くなっています(再構築せず、CIを渡し、しばらくの間活動をしていませんでした)。それはおそらく私たちのせいです。申し訳ありません。私たちのPRキューを管理下に置いて、私たちがあなたに戻るために時間がかかりすぎるのを防ぐために、私たちはキューをクリーンアップしています。残念ながら、これはこのPRが閉じていることを意味します。

あなたが探している機能はマージされていないため、利用できません。

たとえば、hereのようにフォームを再構築することもできます。

これはまだ実装されていない他の参考資料です。今のところ唯一の回避策があります。

  1. https://github.com/angular/angular/issues/6169
  2. https://github.com/angular/angular/issues/4933

1つの提案されました:

onSubmit(value: any): void { 
    form.controls.forEach((name, control) => { 
    control.updateValue(''); 
    control.setErrors(null); 
    }); 
} 

別の方法:

this.form['_touched'] = false; 
StringMapWrapper.forEach(this.form.controls, (control: AbstractControl, name: string) => { 
    control['_touched'] = false; 
}); 

を参照してくださいトンGitHubで回避策を発行しています。それ以外にはこれのためのソリューションはまだ組み込まれていません。

1

アクティブがfalseの場合、フォームを破棄し、再作成しますあなたのテンプレート

<form *ngIf="active"> 

で、その後Angular documentation, forms

active = true; 

    newHero() { 
    this.model = new Hero(42, '', ''); 
    this.active = false; 
    setTimeout(()=> this.active=true, 0); 
    } 

でのドキュメントから。

上記のとおり、これは一時的な回避策です。

0

あなたはこれを試してみることができます。まず天候の状態をチェックするか、汚れているかどうかを調べる必要があります。

onsubmit(){ 
    console.log(this.model); 
    if (this.model.dirty) { 
return confirm('You have unsaved changes. Are you sure you want to navigate away?'); 
     } 
     return true; 
} 
関連する問題