2017-05-23 10 views
0

簡単な塗布のための角度2/4パターンに関する質問がいくつかあります。私が見たほとんどの例では、挿入/更新後のデータの更新方法はわかりません。Angular Observables vs Promise CRUDとデータのリフレッシュ

私はObservablesで少し新しくなっていますが、データのリフレッシュ挿入/更新/削除後。誰かがデータをリフレッシュする最良の方法を説明することができますか、私は実際に約束の代わりにObservablesを使用する必要がありますか?約束を使用することはまだ受け入れられていますか?

Observablesで以下を行うにはどうすればよいですか?

users.service

insertPromise(user : User) 
{ 
    let headers = new Headers({ 'Content-Type': 'application/json' }); 
    let options = new RequestOptions({ headers: headers }); 
    let url = this.baseUrl; 

    return this.http.post(url, JSON.stringify(user),options)   
      .do(data=>console.log(JSON.stringify(data))) 
      .toPromise() 
      .then(this.extractPromiseData)   
      .catch(this.handleError); 
} 

insertObservable(user : User) { 

    this.usersService.insert(user) 
     .subscribe(
     resp => { 

     console.log(resp); 
     }, 
     error => this.errorMessage = <any>error); 
    } 

ユーザーlist.componentは、(挿入後にリフレッシュが含まれています)

insert(user: User) 
{ 
    this.usersService.insertPromise(user) 
     .then(result=>console.log(result)) 
     .then(
      ()=>this.usersService.getAllUsers() 
      .then(
      users=> 

      this.users = users 

      ) 
      .catch(error=>console.log(error))   
      ) 
     .catch(error=>console.log(error)); 
} 

insertObservable(user: User) 
    { 

    let headers = new Headers({ 'Content-Type': 'application/json' }); 
    let options = new RequestOptions({ headers: headers }); 
    let url = this.baseUrl; 

    return this.http.post(url, JSON.stringify(user),options) 
      .map((response: Response) => response.json()) 
      .do(data=>console.log(JSON.stringify(data))) 
      .catch(this.handleError); 
    } 

答えて

0

それはあなたの実装に依存します。たとえば、POSTリクエストに応じて新しいユーザーを返信し、このユーザーデータをthis.usersに入れることができます。もう1つの選択肢は、成功した後にリスト全体をリロードすることです。POST/PUT最初の方法は、HTTP要求が追加されないため、より良い方法だと思います。コード例:

+0

変更/新規ユーザーをリロードすることは意味がありますが、リスト全体を読み込むにはどうすればよいのですか。 次に、ユーザーを探してそのユーザーを更新したユーザーに設定する必要があります。削除のために、私はちょうどユーザーを削除する必要がありますか? – Fab

+0

実際、私はPrimeNG DataTableを使用しています。私には初めての普及した演算子でしか動作しないことに気付きました。助けてくれてありがとう!! let users = [... this.users]; users.push(user); this.users = users; – Fab

+0

おそらく、DataTableは新しいオブジェクト(配列)を受け取ったときにのみ変化を検出し、スプレッド演算子は明らかに新しい配列を作成します。 – gsc

関連する問題