[英]How to use Rxjs startWith to provide default initial values to withLatestFrom using outer observable's value?
this works, but I don't want to use null for initial values of startDate and endDate, I need to initialize with the values from another observable, the userInfo$ in the code below:这有效,但我不想对 startDate 和 endDate 的初始值使用 null,我需要使用来自另一个 observable 的值进行初始化,即下面代码中的 userInfo$:
export interface IUserInfo {
UserEntryStartDate: Date;
UserEntryEndDate: Date;
// ...
}
public userInfo$: Observable<IUserInfo>;
private dateFilterSubject = new Subject<{
startDate: Date;
endDate: Date;
}>();
this.userInfo$
.pipe(
withLatestFrom(
this.dateFilterSubject.pipe(
startWith({
startDate: null,
endDate: null
})
)
)
)
.subscribe(([userInfo, dateFilters]) => {
// ... do stuff
}
This is what I'd like to do这就是我想做的
this.userInfo$
.pipe(
takeWhile(() => this.active),
withLatestFrom(user => // userInfo from outer observable
this.dateFilterSubject.pipe(
startWith({
startDate: user.UserEntryStartDate,
endDate: user.UserEntryEndDate
})
)
)
)
.subscribe(([userInfo, dateFilters]) => {
// do stuff
}
It even gives correct autocomplete and typing on the user
parameter, however I get an error on the subscribe of:它甚至提供了正确的自动完成和输入user
参数,但是我在订阅时出现错误:
Type 'Observable<{ startDate: Date; endDate: Date; } | { startDate: Date; endDate: Date; }>' must have a '[Symbol.iterator]()' method that returns an iterator.
What am I doing wrong?我究竟做错了什么?
You can use BehaviorSubject
for the same.您可以将BehaviorSubject
用于相同的目的。 Here you can set the default value.在这里您可以设置默认值。
Example:例子:
private user = new BehaviorSubject<string>('john');
In your case:在你的情况下:
private dateFilterSubject = new BehaviorSubject<{
startDate: Date;
endDate: Date;
}>({{value}});
For more info please refer:更多信息请参考:
https://www.learnrxjs.io/learn-rxjs/subjects/behaviorsubjecthttps://www.learnrxjs.io/learn-rxjs/subjects/behaviorsubject
Hope this will help.希望这会有所帮助。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.