angular - 如何在订阅前获取 form control valueChanges value?

嗨,我有一个父 form control 和一个子组件。在父 form control 更改之前,子组件不会显示,例如:

<div *ngIf="parentControlChanged">
  <ChildComponent [value]="parentChanged$ | async"></ChildComponent>
</div>

如您所见,子组件使用 async 管道从父控件获取 value (这里 parentControlChanged 是一个布尔状态,表示父控件首先更改,而 parentChanged$ 只是一个管道parentControl.valueChanges 的一些附加副作用与此问题无关)。

问题是在父控件更改之前不会显示子组件,因此尚未订阅 valueChanges,因此无法获取更改的父控件的 value。否则,子组件一旦显示就会获取父控件的每个后续更改value。

那么有没有办法让子组件在使用 async 管道订阅 valueChanges 后获取父控件的最新/当前 value,就像订阅 BehaviorSubject 一样?

回答1

如果其他东西已经订阅了 parentChanged$ 那么,除了你没有进入的副作用之外,在它的末尾使用管道 shareReplay(1)

然后,只要 parentChanged$ 已经被订阅,当子组件或其他任何东西订阅它时,它最初将获得最后一个发出的 value 并且任何副作用仍将执行一次,而不是每个订阅者执行一次。

如果 parentChanged$ 尚未订阅,那么您要么必须始终订阅并执行上述操作,要么更改为您执行诸如将 xyz.valueChanges 更改为 concat(defer(() => of(xyz.value)), xyz.valueChanges) 之类的模式,以便在您订阅时,它以您要发送的初始 value,然后发送更改。

相似文章

python - 从用户输入提交后填充 Django pdf

我已经为我的Web框架完成了HTML以及pdf空白文件,但是当涉及到提交POST时,我似乎无法让它工作。它假设一旦你按下提交,它会将用户输入保存到创建的空白pdf中,稍后通过一个按钮(已经创建并且可以...

最新文章