2017-07-18 62 views
1

一直在考慮針對表單實現異步custom validator,該表單的唯一目的是與微服務進行通信,以便從人的ID號碼中提取信息(如年齡,出生日期,性別比賽等),當然是否根據他們發送的國家ID號是否有效。Angular 2 - 具有微服務的反應形式異步驗證

所以如果一個人輸入他們的ID號碼並選擇一個國家,一個請求就會被引發到一個微服務,如果他們沒有設置他們的性別,它會自動填充它,然後他們可以改變它如果需要的話。

問題

  1. 是好/ OK實踐根據以下情形的驗證設置其他形式的控制值?
  2. 如果是這樣,我將如何去修改其他窗體控件值?

任何幫助,將不勝感激:)

+1

一個驗證不應該設置窗體的任何值,它應該只驗證。 – Chrillewoodz

回答

1

就像我說的評論,一個驗證器不應該設置或更新表單控件,組或數組的值。它只應該驗證。

但是,您可以做的是使用.valueChanges來偵聽窗體的更改,並在回調中檢查某個控件是否有效,並相應地更新其他控件。

下面是一個例子:

this.form.get('someControl').valueChanges(() => { 

    if (this.form.get('someControl').valid) { 
    this.form.get('someOtherControl').setValue(true); 
    } 
}); 
+0

出於好奇,是否記錄在某個地方,在驗證器中添加這樣的邏輯,因爲這是一種非常不尋常的情況?它確實有意義,但你完全分離的邏輯,但可能 最終將您的答案標記爲正確 –

+1

不是我所知道的,但名稱本身使它非常清楚。我認爲在官方風格指南的某個地方提到你應該創建「純粹」功能,這意味着它們沒有任何副作用。驗證函數修改某些其他控件會破壞該模式,因此它只應驗證,然後您會在其他位置執行其他操作。 – Chrillewoodz

+0

是有道理的,謝謝你的提示反饋隊友:) –