我有这个代码: https://stackblitz.com/edit/angular-ivy-cmano3?file=src/app/app.component.ts
<button (click)="trigger1.next()">Button 1</button>
<button (click)="trigger2.next(false)">Button 2</button>
{{ myObservable$ | async }}
export class AppComponent implements OnInit {
trigger1 = new Subject<void>();
trigger2 = new BehaviorSubject<boolean>(false);
data$ = of('some data');
myObservable$ = new Observable<number>();
ngOnInit() {
this.myObservable$ = someMagicOerator([data$, trigger1, trigger2]).pipe(
map(
([
latestData,
isTrigger1Triggered,
isTrigger2TriggeredWithBoolData
]) => {
if (isTrigger1Triggered) {
//I want to access here latesData from data$
console.log(latestData);
return 1;
} else if (isTrigger2Triggered) {
//I want to access here latesData from data$
//and access trigger2 boolean data
console.log(latestData);
console.log(trigger2BooleanData);
return 2;
}
}
)
);
}
}
我想在按下按钮1时得到结果1,按下按钮2时得到结果2 .并且在这两种情况下都需要访问来自 data$ 和来自 triger2 的数据的最新数据。 有任何想法吗?谢谢
答案 0 :(得分:1)
从 data$ 和 trigger2 访问最新数据
对我来说听起来很像 combineLatest
,但不确定它是否是您正在寻找的缓存行为。
也许你还需要将你的 Observable 拆分成两个 Observable 以便区分两次按钮点击:
this.myObservable$ = merge(
combineLatest([data$, trigger1]).pipe(
map(([latestData]) => {
// access latestData here;
return 1;
})
),
combineLatest([data$, trigger2]).pipe(
map(([latestData, booleanValue]) => {
// access latestData and booleanValue here;
return 2;
})
)
);
我正在使用 merge
为 this.myObservable$
的用户将两个 Observable 合并为一个。