我还在试图了解Angular中的rxjs,我仍然没有完全理解管道和操作者。我需要帮助解决这个问题,以及什么是正确的方法(已经尝试了一个肮脏的方法,并实现了它,但感觉不对)。
我想在加载一个页面的时候获取一些数据,由路由中的param引用。有两种情况,如果它有一个id,就应该把它保存到本地变量中,然后,获取数据并处理它。如果它没有任何id param,就应该跳过数据的获取,我的代码是这样的。
this.activatedRoute.params.pipe(
//I want to save params.id to this.id here
//I dont want to execute the switchmap if params.id is empty
switchMap(params => this.establishmentService.getEstablishment(params.id))
).subscribe(/* process data */);
我如何访问本地变量从activatedRoute params返回的数据? 如果param为空,我如何避免getEstablishment函数?谢谢你。
你需要使用 tap
和 filter
的。
this.activatedRoute.params.pipe(
tap(params => this.id = params.id), // saving id
filter(params => !!params.id), // ignoring service until we have an id
switchMap(params => this.establishmentService.getEstablishment(params.id)),
).subscribe(servieResult => {});
首先,你可以很容易地避免用三元操作符执行getEstablishment来检查params.id是否为null。
this.activatedRoute.params.pipe(
switchMap(params => params.id ? this.establishmentService.getEstablishment(params.id)) : params
).subscribe(/* process data */);