3 回答

TA貢獻1821條經驗 獲得超5個贊
動態設置驗證器時,我們需要調用updateValueAndValidity(). 還記得添加emitEvent: false,這意味著valueChanges不會被觸發(以防止循環)。因此,將您的代碼更改為:
phoneControl.valueChanges.subscribe(() => {
if (phoneControl.value === "") {
phoneControl.setValidators(null);
// or
// phoneControl.setValidators([]);
// or as mentioned by Tilak
// phoneControl.clearValidators();
} else {
phoneControl.setValidators(this.phoneValidator());
}
phoneControl.updateValueAndValidity({emitEvent: false});
});

TA貢獻1859條經驗 獲得超6個贊
我會建議你這樣做 -
if (phoneControl.value === "") {
phoneControl.clearValidators();
} else {
phoneControl.setValidators(this.phoneValidator());
}
phoneControl.updateValueAndValidity({emitEvent: false});
清除驗證器比將其設置為 null 更好。
添加回答
舉報