1

根据条件语句,无法弄清楚如何订阅 Angular 服务的所需方法

  // this.someService.someMethod depending on the conditional statement
  .pipe(takeUntil(this.unsubscribe$))
  .subscribe((items) => {
    this.someData = items;
  });
4

2 回答 2

4

如果您的两个服务都返回 Observable 或 Promise,您可以使用 RxJs 条件运算符iff来实现。

运算符接受 3 个参数,第iff一个是您的条件,第二个和第三个是您返回 Observable/Promise 的不同服务。

如果条件是true订阅第一个observable,如果是false订阅第二个observable

 iif(
      () => {
           //Add your condition here
           return a + b === 4;
         },
         this.someService.someMethodWhenTrue(),
         this.someService.someMethodWhenFalse()
     )
     .pipe(takeUntil(this.unsubscribe$))
     .subscribe((items)=> {
         this.someData = items;
     });

我建议您阅读此https://www.learnrxjs.io/learn-rxjs/operators/conditional/iif

于 2022-01-23T12:39:36.727 回答
2

如果可能要使用不同的服务,您可以执行以下操作:

let source$: Observable<any>;

if ( conditionA ) {
  source$ = this.someService.someMethodA()
} else {
  source$ = this.someService.someMethodB()
}

source$
  .pipe(takeUntil(this.unsubscribe$))
  .subscribe((items) => {
    this.someData = items;
  });

或者如果只有一项服务可以使用,则只保存方法名称。这也取决于什么对你来说更具可读性。

let methodName: string;

if ( conditionA ) {
  methodName = 'someMethodA';
} else {
  methodName = 'someMethodB';
}

this.someService[methodName]()
  .pipe(takeUntil(this.unsubscribe$))
  .subscribe((items) => {
    this.someData = items;
  });
于 2022-01-23T08:50:14.940 回答