2016-11-10 2 views
0

私はユーザオブジェクトを返す角度サービスを持っています。ユーザオブジェクトには独自の属性と壁の配列があります。このサービスは、呼び出し元のコンポーネントに監視可能オブジェクトを返します。このサービスでは、httpサービスから返されたjsonからユーザーオブジェクトを作成できます。しかし、コンポーネント内のサービスを購読すると、返されるオブジェクトはnullになります。私はここで間違って何をしていますか?角2:サービスからオブジェクト(ネストされていない)を返さないことがわかります

// user.ts 

import { wall } from './wall'; 

export class user { 
    Id: number; 
    EntryType: number; 
    UserType: number; 
    SubscriptionType: number; 
    IsCoach: boolean; 
    Username: string; 
    Email: string; 
    Name: string; 
    Password: string; 
    Created: string; 
    MemberWalls: wall[]; 
} 
//wall.ts 
export class wall { 
    Title: string; 
    ViewItem_Id: number; 
} 
//authentication.service.ts 

authenticate(authRequest: login): Observable<user> { 
     let url: string = this.apiUrl + AppSettings.LOGIN_SERVICE; 
     let headers = new Headers({ 
      'Content-Type': AppSettings.CONTENT_TYPE_HEADER, //'; charset=utf-8', 
      'client-secret': AppSettings.CLIENT_SECRET, 
      'client-id': AppSettings.CLIENT_ID 
     }); 

     let options = new RequestOptions({ headers: headers }); 

     return this._http.post(url, authRequest, options) // 
      .map(data => { 
       this.authenticated(data); 
      }) 
      .catch(this.handleError); 

    } 

    private authenticated(res: Response) { 
     let body = res.json(); 
     if (body.StatusCode === 200) { 
      localStorage.setItem('auth_token', res.headers.get("access-token")); 
      let user1: user = body.Data; 
      //The user object is fine here. 
      //That means that the json and the user class structure match perfectly 
      console.log(user1); 
      return body.Data || {}; 
     } 
     else { 
      return {}; 
     } 
    } 
//login.component.ts 

login() { 
     this.errorMessage = ''; 
     this.currentUser = null; 

      this._authService.authenticate(this.loginModel) 
       .subscribe(user1 => this.currentUser = user1, 
       error => this.handleError(error)); 

    //The user1 returned by the service is always null. 
    } 
+0

それがnullであることをどうやって知っていますか? – echonax

+2

'user1 => this.currentUser = user1、'は、データが到着したときに呼び出される関数です。その前にあなたのコメントがある場所でコードが実行されます。 –

答えて

0

受け入れ答え:

user1 => this.currentUser = user1は、データが到着したときに呼び出される関数です。あなたのコメントがある場所のコードはそれ以前に実行されます

3

POSTリクエストの結果をマッピングするときは、リターン文が欠落しています。 ES6とTSに

  • 矢印機能はブラケットを使用して定義されている場合は、return文が必須です。矢印関数は括弧なしで定義されている場合
  • は、ES6が署名矢印の後に提供される発現の値を返すreturn文を自動生成

例:ギュンターから

let f = (data) => this.authenticated(data);; 
// Or 
let f = (data) => { return this.authenticated(data); }; 
+0

これは、少なくともShilpa Nagavaraを試してみると便利だと思います。 –

関連する問題