Angular rxjs,如何通过两个触发器获取最新数据,并知道谁被触发?
我有以下代码:Angular rxjs,如何通过两个触发器获取最新数据,并知道谁被触发?,angular,rxjs,Angular,Rxjs,我有以下代码: 按钮1 按钮2 {{myObservable$| async} 导出类AppComponent实现OnInit{ trigger1=新主题(); trigger2=新行为主体(false); 数据$=的(‘某些数据’); myObservable$=新的可观测(); 恩戈尼尼特(){ this.myObservable$=someMagicOerator([data$,trigger1,trigger2])管道( 地图( ([ 最新数据, Istrigger1触发, isT
按钮1
按钮2
{{myObservable$| async}
导出类AppComponent实现OnInit{
trigger1=新主题();
trigger2=新行为主体(false);
数据$=的(‘某些数据’);
myObservable$=新的可观测();
恩戈尼尼特(){
this.myObservable$=someMagicOerator([data$,trigger1,trigger2])管道(
地图(
([
最新数据,
Istrigger1触发,
isTrigger2TriggeredWithBoolData
]) => {
如果(isTrigger1Triggered){
//我想从数据访问这里的最新数据$
console.log(最新数据);
返回1;
}否则如果(isTrigger2Triggered){
//我想从数据访问这里的最新数据$
//和访问触发器2布尔数据
console.log(最新数据);
console.log(trigger2BooleanData);
返回2;
}
}
)
);
}
}
我想在按下按钮1时得到结果1,在按下按钮2时得到结果2。在这两个casse中,它需要从data$和triger2访问最新数据。
有什么想法吗?谢谢
从data$和trigger2访问最新数据
听起来很像combinelateest
,但不确定它的缓存行为是否正是您所需要的
也许您还需要将您的可观察对象拆分为两个可观察对象,以便您可以区分两次按钮点击:
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$
的用户使用
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;
}
}
)
);
}
}
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;
})
)
);