2017-05-03 49 views
4

以角反應形式。如何在成功提交後僅重置表單的狀態Angular Reactive forms:如何重置表單狀態並在提交後保留值

下面的過程是:

  • 創建形式和服務結果setValue
  • 修改值並提交表單
  • 如果表單正確提交到服務,然後復位並保持價值

如何保持修改後的值並將窗體重置爲原始狀態。

form.reset()只是清空窗體。但如果我不叫它,狀態不會重置,例如我的驗證取決於表單狀態類(原始,骯髒,有效等)仍然存在。

+0

我通常創建像在initForm的方法,我呼籲ngInit,並提交形式 – mareks

回答

4

@smnbbrv的解決方案的工作非常好。

您也可以將您的實際表單值提供給reset()方法。

鑑於事實myReactiveForm是組件中的反應形式。成功後提交表單的(通過調用例如服務),那麼你可以這樣做:

this.myReactiveForm.reset(this.myReactiveForm.value); 

它會重置表單,並設置了「新」的形式值你形成有同樣的價值。

這種方法可以在英雄例如遊覽待見Official Angular.io doc

+1

後再次,這是這麼多的黑客攻擊:d。然而,我必須承認它應該工作;) – smnbbrv

+0

是的!通過閱讀Angular doc,我們可以找到驚人的解決方案。這些傢伙太棒了! – BlackHoleGalaxy

+0

嗯,自從angular2測試版閱讀它四次後,我就厭倦了閱讀它,所以我會把它留給那些喜歡它的人:)我其實並不覺得這是一個好的解決方案,因爲它不必要地重寫所有的形成價值觀,並可能導致巨大形式的性能問題。 – smnbbrv

3

這幾乎是簡單:

this.form.markAsPristine(); 
this.form.markAsUntouched(); 

這將重置表格元數據和形式是質樸又