2017-06-19 23 views
-1

サーバーからデータを取得するサービスを作成しましたが、コントローラで解決されたデータを取得する方法がわかりません。私は問題が機能「フェッチ」自体の代わりに、解決したデータを返す私と関係していると思いコンポーネントで角度サービス約束

​​

/コントローラ

export Class UserComponent implements OnInit { 
    users: any[]; 

    constructor(private userService: UserService) {} 

    ngOnInit() { 
    this.users = this.userService.getUsers(); 
    } 
} 

:ここ

はサービスです。しかし、私はそれについて正しい方法を理解することはできません。

+1

あなたには「返品」がありません。それは 'return response.json()'でなければなりません – Phil

+0

また、あなたは 'users'に約束を割り当てています。これは、 'this.userService.getUsers()。(users => this.users = users)' – Phil

+0

を試したくないかもしれません。@Phil多分、彼はテンプレートで 'async'パイプを使用したいと思っています:) –

答えて

2

たぶん、あなたはこのようなものが必要です。そうしない場合は

<div *ngFor="let user of users | async"> 
    <span>Maybe print username: {{user.name}}</span> 
</div> 

:あなたのコンポーネントで

export class UserService { 

    getUsers() { 
     return fetch('http://localhost:8000/api/users') 
     .then(function(response) { 
      console.log(response); 
      return response.json(); 
     }); 
    } 
} 

export class UserComponent implements OnInit { 
    users: any; 

    constructor(private userService: UserService) {} 

    ngOnInit() { 
    this.users = this.userService.getUsers(); 
    } 
} 

、テンプレートでasyncパイプを使用してasyncパイプを使用します。

コンポーネントのコード:

export class UserComponent implements OnInit { 
    users: any; 

    constructor(private userService: UserService) {} 

    ngOnInit() { 
    this.userService.getUsers().then(data => { 
     // do something with response data 
     console.log(data); 
     this.users = this.someMethodToTransformResponse(data); 
    }); 
    } 
    someMethodToTransformResponse(data) { 
    // return modification your data 
    } 
} 

とテンプレート:

<div *ngFor="let user of users"> 
    <span>Maybe print username: {{user.name}}</span> 
</div> 
+0

ありがとう!これは、ビューに直接データを送信したい場合に機能します(この場合は真です)。私はビューでパイプを使用しなければならないということは知らなかった。しかし、私は最初に私のコントローラの内部のデータで何かをしたかったと言うことができますか? – user2915962

+0

上記の更新された回答を見てみましょう。 –

+0

ありがとうございます! – user2915962

1

我々は内部そして約束の復帰応答JSONを逃しています。

export class UserService { 

    getUsers() { 
     let data = []; 
     return fetch('http://localhost:8000/api/users') 
      .then(function(response) { 
       console.log(response); //Response gets logged 
       return response.json(); 
      }) 
      .then(function(data) { 
       console.log(data); //Data gets logged 
       return data; 

      }) 
     }; 
    ... 

getUsersサービスはAjaxコールであり、結果をputします。

export Class UserComponent implements OnInit { 
    users: any[]; 

    constructor(private userService: UserService) {} 

    ngOnInit() { 
    this.userService.getUsers().then(users => { 
     this.users = users; 
    }); 
    } 
} 
関連する問題