首页 文章

Observable中的Angular Redirect订阅

提问于
浏览
0

我使用Angular 4作为自定义组件,仅在一个页面上传音频(它不是SPA) . 文件上传后我想将浏览器重定向到页面 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});
}

和重定向功能:

redirectToTracks() {
  window.location.href = '/profile/tracks';
}

但它不起作用,似乎Angular称之为后台请求:

enter image description here

如果我将console.log(res)放入订阅中,则会在那里记录重定向

但是,如果我只在ngOnInit()中重定向它就可以了!

1 回答

  • 1

    解决方案是使用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;
        });
    );
    

相关问题