子組件e-notes-p-quick-phrases-list有一個 mat-grid-list,當用戶單擊它時,可以單擊一個插入按鈕,該按鈕將該文本插入到父組件中的文本區域“ notes ”中。
然而,即使它成功地插入它,表單仍然被認為是無效的,因為用戶沒有在文本區域中輸入。
如何讓表單檢測到文本已插入到 textarea 并將驗證器更改為 true?
當我搜索時,我似乎找不到任何關于此的內容。
HTML(父):
<form [formGroup]="form" (ngSubmit)="save({ methodName: 'setV', visit: $event })">
<mat-form-field class="bordered">
<textarea matInput formControlName="notes" value="{{visit.ENotes}}"
placeholder="E Notes" rows="5" id="DropHere"></textarea>
</mat-form-field>
<div>
<e-notes-p-quick-phrases-list [vId]='this.vId' (newItemEvent)="addItem($event)"></e-notes-p-quick-phrases-list>
</div>
</form>
TS(父母):
createForm() {
this.form = this.fb.group({
'pD': [this.selectPValue, Validators.compose([Validators.required, ValidatorsLibrary.autocompleteSelect(this.issues)])],
'sD': [this.selectSValue, AutocompleteValidator.selectNotRequired(this.issues)],
'notes': [this.v.ENotes, Validators.compose([Validators.required])],
});
this.onPageLoad();
}
我還嘗試向 textarea 添加焦點,但它沒有被觸發:
HTML:
<textarea matInput formControlName="notes" value="{{v.ENotes}}"
placeholder="E Notes" rows="5" id="DropHere" on-focus="onChanges()"></textarea>
TS:
onChanges() {
this.form.get('notes').valueChanges
.subscribe(pd => {
this.form.get('notes').markAsTouched;
});
}
uj5u.com熱心網友回復:
如本評論所述,洗掉value="{{visit.ENotes}}". 您不應該在提供表單控制指令的同時將值系結到某個東西。相反,請在事件處理程式中的表單控制元件上呼叫 setValue newItemEvent。還記得updateValueAndValidity在你的addItem方法中呼叫,這樣做:
(TS) 家長:
addItem(newItemEvent: ??): void {
this.form.get('notes').setValue(newItemEvent.ENotes);
this.form.get('notes').updateValueAndValidity();
}
出于訂閱和監聽表單更改的目的,OnInit方法比OnChanges更適合。@Input只要您的組件的屬性發生更改,就會觸發 OnChanges 。如果您的父組件收到輸入,您的 OnChanges 方法將在這些更改時重新運行并再次訂閱表單。
我知道這個問題與非作業驗證器有關,但我不禁注意到表單上沒有觸發提交操作的按鈕。我相信您需要一個<button type="submit">內表單標簽。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/521010.html
上一篇:單擊時跨度標簽不會向上移動
下一篇:單擊按鈕克隆表單
