Angular7中switchmap前的条件和赋值。

问题描述 投票:0回答:2

我还在试图了解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函数?谢谢你。

angular rxjs angular7
2个回答
1
投票

你需要使用 tapfilter 的。

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

-1
投票

首先,你可以很容易地避免用三元操作符执行getEstablishment来检查params.id是否为null。

 this.activatedRoute.params.pipe(
            switchMap(params => params.id ? this.establishmentService.getEstablishment(params.id)) : params
        ).subscribe(/* process data */);
© www.soinside.com 2019 - 2024. All rights reserved.