2017-09-19 13 views
0

カスタムコンポーネントにAngular 4を使用して、オーディオを1ページ(SPAではなく)にアップロードします。ファイルがアップロードされたら、ブラウザをページhttp://website/profile/tracksにリダイレクトします。Observable subscribe内の角度リダイレクト

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; 
    }); 
); 
関連する問題