2017-03-02 7 views
0

私は、APIへのポストリクエストを行い、新しく作成されたドキュメントのオブジェクトを取得する関数を持っています。私は正常にこの関数呼び出しでAPIからデータを取得していますが、正しい "_id"情報をコンソールに記録した新しいオブジェクトを取得している間、私の "this.router.navigate(['/ record' _id]) "がトリガされていません。私は、データが返されたときにプログラムでナビゲーションを処理するように、私がやっているようにこの関数の最後にそれを付けることができるはずだと思います。しかし、それは動作していません。その機能が起動されても、アプリはナビゲートしません。私はここで何が欠けていますか?私の "this.router.navigate"はAngular 2 Appでトリガーしません

createRecord() { 
     this.recordsService.createRecord().subscribe(
     data => { 
      // refresh the list 
      console.log(data); 
      return true; 
     }, 
     error => { 
      console.error("Error creating record..."); 
      return Observable.throw(error); 
     } 
     ); 
     console.log('createRecord function initiated...'); 
     this.router.navigate(['/record', this._id]); 
    } 

私のサービスは、次のようになります。

createRecord() { 
     const headers = new Headers({ 'Content-Type': 'application/json' }); 
     const options = new RequestOptions({ headers: this.headers }); 
     const body = JSON.stringify({deleted: true}); 
     return this._http.post 
     ('https://api.somesite.com/v0/records?apikey=someapikey', 
     body, options).map((res: Response) => res.json()); 
    } 
+0

はどこ 'createRecordあるrouter.navigateを呼び出す必要があります() 'から呼び出されていますか? 'this.router.navigate(...)'が 'data'が利用可能になる前に呼び出されていることを知っていますか? –

答えて

1

を実際に、あなたは成功した(成功コールバックで)あなたのデータを取得するときに

createRecord() { 
     this.recordsService.createRecord().subscribe(
     data => { 
      // refresh the list 
      this.router.navigate(['/record', data._id]); 
     }, 
     error => { 
      console.error("Error creating record..."); 
      return Observable.throw(error); 
     } 
     ); 
    } 
+0

あなたは正しいです!それがトリックでした。ありがとう。 – Muirik

+0

それを動作させるには、 "this.router.navigate ..."コールの位置を移動する必要があります。私は、あなたが示唆しているように、 "data._id"を使う必要がありました。 – Muirik

+1

OK編集が承認されました。これが私のコメント(またはdata.idの呼び出し)で提案したものです。 – mickdev

関連する問題