2017-09-19 66 views
0

我使用Angular 4作为一个自定义组件来仅在一个页面上传音频(它不是SPA)。当文件上传时,我想将浏览器重定向到页面http://website/profile/tracksAngular重定向里面Observable订阅

我的服务电话的样子:

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'; 
} 

但它不工作,好像角调用它像背景要求:

enter image description here

如果我把执行console.log(水库)中认购其记录重定向有

但如果我把ngOnInit()只是重新正常工作!

回答

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