如何使用条件语句订阅不同的服务方法?
How can I subscribe to a different service method using a conditional statement?
根据条件语句无法弄清楚如何订阅 Angular 服务的所需方法
// this.someService.someMethod depending on the conditional statement
.pipe(takeUntil(this.unsubscribe$))
.subscribe((items) => {
this.someData = items;
});
如果可能需要使用不同的服务,您可以执行以下操作:
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;
});
如果您的两个服务 return 是 Observable 或 Promise,您可以使用 RxJs 条件运算符 iff
来实现。
iff
运算符有 3 个参数,第一个是您的条件,第二个和第三个是您的不同服务 return 和 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
根据条件语句无法弄清楚如何订阅 Angular 服务的所需方法
// this.someService.someMethod depending on the conditional statement
.pipe(takeUntil(this.unsubscribe$))
.subscribe((items) => {
this.someData = items;
});
如果可能需要使用不同的服务,您可以执行以下操作:
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;
});
如果您的两个服务 return 是 Observable 或 Promise,您可以使用 RxJs 条件运算符 iff
来实现。
iff
运算符有 3 个参数,第一个是您的条件,第二个和第三个是您的不同服务 return 和 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