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;
    })
  )
);