Angular 可观测系统内的角度重定向
我使用Angular 4作为自定义组件,只在一个页面上上传音频(这不是SPA)。文件上载后,我想将浏览器重定向到页面Angular 可观测系统内的角度重定向,angular,redirect,rxjs,Angular,Redirect,Rxjs,我使用Angular 4作为自定义组件,只在一个页面上上传音频(这不是SPA)。文件上载后,我想将浏览器重定向到页面http://website/profile/tracks 我的服务电话如下所示: this.uploadService.uploadTrack(this.trackForm, csrfToken).subscribe(res => { this.redirectToTracks(); this.loading = false; }, err => { th
http://website/profile/tracks
我的服务电话如下所示:
this.uploadService.uploadTrack(this.trackForm, csrfToken).subscribe(res => {
this.redirectToTracks();
this.loading = false;
}, err => {
this.loading = false;
});
上载服务:
uploadTrack(track, csrfToken): Observable<any> {
const headers = new HttpHeaders().set('Csrf-Token', csrfToken);
return this.http.post('/profile/upload', track, {headers: headers});
}
但它不起作用,似乎Angular将其称为后台请求:
如果我把console.log(res)放在subscribe中,它会在那里记录重定向
但是如果我把重定向放在ngOnInit()中,它就工作得很好 解决方案是使用NgZone:
constructor(private utilsService: UtilsService,
private uploadService: UploadService,
private zone: NgZone,
){ ... }
this.uploadService.uploadTrack(this.trackForm, csrfToken).subscribe(
res => {
this.loading = false;
this.zone.runOutsideAngular(() => {
window.location.href = '/profile/tracks';
});
},
err => {
this.loading = false;
});
);
解决方案是使用NgZone:
constructor(private utilsService: UtilsService,
private uploadService: UploadService,
private zone: NgZone,
){ ... }
this.uploadService.uploadTrack(this.trackForm, csrfToken).subscribe(
res => {
this.loading = false;
this.zone.runOutsideAngular(() => {
window.location.href = '/profile/tracks';
});
},
err => {
this.loading = false;
});
);