我需要在我的项目中做如下几行(来自 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/