订阅前如何获取表单控件的valueChanges值?
How to get a form control valueChanges value before subscription?
您好,我有一个父表单控件和一个子组件。子组件只有在父表单控件发生变化后才会显示,例如:
<div *ngIf="parentControlChanged">
<ChildComponent [value]="parentChanged$ | async"></ChildComponent>
</div>
如您所见,子组件正在使用 async
管道从父控件获取值(这里 parentControlChanged
是一个布尔状态,表示父控件首先被更改并且parentChanged$
只是 parentControl.valueChanges 的一个管道,还有一些与这个问题无关的额外副作用。
问题是子组件只有在父控件更改后才会显示,因此还没有订阅 valueChanges
,因此无法获取父控件的更改值。否则,一旦显示,子组件将获取父控件的每个后续更改值。
那么有没有一种方法可以让子组件在使用 async
管道订阅 valueChanges
后获取父控件的 latest/current 值,就像订阅 BehaviorSubject
?
如果其他内容已经订阅 parentChanged$
那么,除了您没有涉及的副作用之外,在它的末尾加入 shareReplay(1)
。
那么,只要parentChanged$
已经被订阅了,当子组件或者其他任何订阅它的时候,它最初会得到last-emitted值和 任何副作用仍将执行一次,而不是每个订阅者一次。
如果 parentChanged$
尚未订阅,那么您要么必须始终订阅并执行上述操作,要么更改为一种模式,您可以将 xyz.valueChanges
更改为 concat(defer(() => of(xyz.value)), xyz.valueChanges)
这样当您订阅时,它会以您要发送的初始值开始,然后 发送更改。
您好,我有一个父表单控件和一个子组件。子组件只有在父表单控件发生变化后才会显示,例如:
<div *ngIf="parentControlChanged">
<ChildComponent [value]="parentChanged$ | async"></ChildComponent>
</div>
如您所见,子组件正在使用 async
管道从父控件获取值(这里 parentControlChanged
是一个布尔状态,表示父控件首先被更改并且parentChanged$
只是 parentControl.valueChanges 的一个管道,还有一些与这个问题无关的额外副作用。
问题是子组件只有在父控件更改后才会显示,因此还没有订阅 valueChanges
,因此无法获取父控件的更改值。否则,一旦显示,子组件将获取父控件的每个后续更改值。
那么有没有一种方法可以让子组件在使用 async
管道订阅 valueChanges
后获取父控件的 latest/current 值,就像订阅 BehaviorSubject
?
如果其他内容已经订阅 parentChanged$
那么,除了您没有涉及的副作用之外,在它的末尾加入 shareReplay(1)
。
那么,只要parentChanged$
已经被订阅了,当子组件或者其他任何订阅它的时候,它最初会得到last-emitted值和 任何副作用仍将执行一次,而不是每个订阅者一次。
如果 parentChanged$
尚未订阅,那么您要么必须始终订阅并执行上述操作,要么更改为一种模式,您可以将 xyz.valueChanges
更改为 concat(defer(() => of(xyz.value)), xyz.valueChanges)
这样当您订阅时,它会以您要发送的初始值开始,然后 发送更改。