gpt4 book ai didi

javascript - 如何基于 rxjs 中现有的 observable 创建一个新的 observable 订阅?

转载 作者:太空狗 更新时间:2023-10-29 17:48:15 24 4
gpt4 key购买 nike

我需要在我的项目中做如下几行(来自 https://github.com/devyumao/angular2-busy )

ngOnInit() {
this.busy = this.http.get('...').subscribe();
}

在我的项目中,我正在根据路由更改发出请求,如下所示:

ngOnInit(): void {   
this.activatedRoute
.params
.map(params => params['queryString'])
.flatMap(id => this.http.(''))
.subscribe(result => this.data = result);
}

每次路线发生变化时,我似乎都需要创建一个新订阅。我不确定该怎么做。

我只在寻找 rxjs 解决方案(不使用 Promise)。

谢谢!

德克

最佳答案

我会在全局范围内(例如在您的主要组件中)以这种方式注册路由更改并在关联的回调中触发您的请求:

this.router.events
.filter(event => event instanceof NavigationStart)
// or NavigationEnd
.subscribe(event => {
this.http.post('').subscribe();
});

这样您就可以订阅一次更改。

如果您想访问路由参数,您还需要注入(inject) ActivateRoute 实例并订阅其 params 属性。

为此,我将利用 Observable 类的 combineLatest 方法,如下所述:

export class AppComponent {

constructor(private router: Router, private route: ActivatedRoute) {
Observable.combineLatest(
this.router.events
.filter(event => event instanceof NavigationStart),
this.route.params
)
.subscribe(data => {
const event = data[0];
const params = data[1];
(...)
});
}
}

不要忘记添加:

import 'rxjs/add/observable/combineLatest';

关于javascript - 如何基于 rxjs 中现有的 observable 创建一个新的 observable 订阅?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44440765/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com