[英]Angular Reactive Form - Button disabled method called twice
我有一個簡單的案例來說明我的問題。
`
AppComponent.ts
`
`
formGroup = new FormGroup({
firstName:new FormControl(''),
lastName: new FormControl('')
});
isValid(){
console.log(this.formGroup);
return true;
}
`
`
AppComponent.html
`
`
<form [formGroup]="formGroup">
<label>FirstName</label>
<input [formControlName]="'firstName'" />
<label>Last Name</label>
<input [formControlName]="'lastName'" />
<button type="submit" [disabled]="!isValid()" >Submit</button>
</form>
`
我的問題是,為什么我從 isValid 方法在控制台中看到兩次 output?。 有什么理由嗎? 如果我以這種方式使用復雜的形式,它會影響應用程序性能嗎?
注意:我 woundring 為什么 isValid 方法被調用了兩次?
我排除了被調用一次的方法。
讓我給你解釋一下。 angular 里面有個東西叫Change Detection
。 這是Angular
內部的一個內部機制。 此更改檢測機制可識別UI
中的更改、輸入、output 屬性以及綁定到 UI 上不同元素的屬性中的值更改。
因此,只要在整個應用程序中檢測到任何更改,angular 就會運行一個change detection
周期來更新所有屬性值以及 UI。
現在,讓我們來回答你的問題。 您在isValid
模板中調用 function 。 所以這里發生的事情是,每當在UI
中檢測到任何更改時,angular 都會在呈現整個 UI 時運行兩次更改檢測,這就是為什么您會看到兩次console.log
的原因。
為什么調用變化檢測兩次?
答案是,您將UI
中的formGroup
綁定到form
元素。 所以最初,您的formGroup
是未定義的,但稍后在您的代碼中您正在創建一個reactive form
。 因此,當創建reactive form
時, formGroup
的值從未undefined
更改為實際的reactive form
object。因此,以這種方式, formGroup
的值更改了 2 次。
它會影響應用程序的性能嗎?
是的,它會極大地影響應用程序的性能,這就是為什么在 angular 中建議,不要直接在html
模板中調用函數。 請改用屬性。 請閱讀此作為參考以獲得更多理解
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.