2017-09-19 67 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; 
    }); 
);