2017-09-28 17 views
2

新しいHttpClientとこの既存のコードをどのように置き換えることができますか?私の問題は、深い解析を行い、サービスクラス外の型付きオブジェクトをComponentに返すことです。問題は、私がUserModelとして角度4.3のHttpクライアント

public authenticate(model: LoginModel): Promise<UserModel> { 
     return this.http 
      .post(this.controller, JSON.stringify(model)) 
      .toPromise() 
      .then(response => response.json().result.data as UserModel) 
      .catch(this.handleError); 

    } 

古いコード

コンポーネント

this.loginService.authenticate(this.loginModel).then(
      res => { this.userModel = res;}, 
      error => { this.handleError(error);} 
      ); 

サービスクラスをresult.data返すことができないんだけどHttpClientをしています改訂サービスクラスコード私が観察し、リターンにresponse.result.dataマッピングするにはどうすればよい

public authenticate(model: LoginModel): Observable<UserModel> { 
      return this.httpClient 
       .post<UserModel>(this.controller, model) 
       .catch(this.handleError); 

     } 

。私はクラスから完全な応答オブジェクトを返すのではなく、型指定されたオブジェクトとしてjsonの一部だけを返すことを望んでいます。

答えて

1

あなたはrxjsからmap演算子を使用して応答をマッピングすることができます。

public authenticate(model: LoginModel): Observable<UserModel> { 
    return this.httpClient 
    .post(this.controller, model) 
    .map(response => response.result.data as UserModel) 
    .catch(this.handleError); 
} 

これはUserModelとして応答データを返します。

+0

編集者は、 –

+0

の後にresponse.result.dataの赤を表示します。次に、 '(response:any)=> response.result.dataをUserModel'として試してください。 – cyrix

+0

ありがとうございました! –

関連する問題