您好我有一個父表單控制元件和一個子組件。直到父表單控制元件發生更改,子組件才會顯示,例如:
<div *ngIf="parentControlChanged">
<ChildComponent [value]="parentChanged$ | async"></ChildComponent>
</div>
如您所見,子組件使用async管道從父控制元件獲取值(這里parentControlChanged是一個布爾狀態,表示父控制元件首先更改,并且parentChanged$只是 parentControl.valueChanges 的管道,帶有一些額外的副作用與這個問題無關)。
問題是在父控制元件更改之前不會顯示子組件,因此尚未訂閱valueChanges,因此無法獲得父控制元件的更改值。否則,子組件一旦顯示就會獲取父控制元件的每個后續更改值。
那么有沒有辦法讓子組件在訂閱valueChangeswithasync管道后獲取父控制元件的最新/當前值,就像訂閱 a 一樣BehaviorSubject?
uj5u.com熱心網友回復:
如果已經訂閱了其他內容,parentChanged$那么除了您沒有涉及的副作用之外,請shareReplay(1)在其末尾添加管道。
然后,只要parentChanged$已經訂閱,當子組件或其他任何東西訂閱它時,它最初將獲得最后發出的值,并且任何副作用仍將執行一次,而不是每個訂閱者執行一次。
如果parentChanged$尚未訂閱,那么您要么必須始終訂閱并執行上述操作,要么更改為您執行類似更改的模式,xyz.valueChanges以便concat(defer(() => of(xyz.value)), xyz.valueChanges)在訂閱時,它以您要發送的初始值開始,然后發送變化。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/477806.html
