2017-11-24 2 views
1

Ich bin neu zu Angular und ich versuche, eine einfache HTTP-Anfrage für Daten zu machen. Wie kann ich auf diese Daten in meiner Komponente zugreifen? Ich erhalte die Fehlermeldung 'Can not Eigenschaft lesen 'get' undefinierter'Http Anruf als Dienst in Angular

data.service.ts

import { Injectable } from '@angular/core' 
import { HttpClient } from '@angular/common/http' 

@Injectable() 
export class FetchData { 

    private url: string = 'https://jsonplaceholder.typicode.com/users' 
    constructor(private http: HttpClient){} 

    get(){ 
     return this.http.get(this.url).subscribe(data => { 
      console.log(data) 
     }) 
    } 

} 

table.component.ts

import { FetchData } from './datatable.service'; 
import { Component, OnInit } from '@angular/core'; 

@Component({ 
    selector: 'app-datatable', 
    templateUrl: './datatable.component.html', 
    styleUrls: ['./datatable.component.css'] 
}) 
export class DatatableComponent implements OnInit { 

    Data: FetchData 

    constructor() { } 

    ngOnInit() { 
    this.Data.get() 
    } 

} 
+0

https://angular.io/guide/http –

Antwort

0

versuchen, dieses:

export class DatatableComponent implements OnInit { 
constructor(private dataService: FetchData) { } 

ngOnInit() { 
    this.dataService.get() 
}} 
1

Sie müssen den Dienst in Ihrer Komponente "injizieren" und das Abonnement in Ihrer Komponente vornehmen.

In Ihrem Service sollten Sie Ihre Antwort "abbilden".

import { Injectable } from '@angular/core' 
import { HttpClient } from '@angular/common/http' 
import 'rxjs/add/operator/map'; 

    @Injectable() 
    export class FetchData { 

     private url: string = 'https://jsonplaceholder.typicode.com/users' 
     constructor(private http: HttpClient){} 

     get(){ 
      return this.http.get(this.url).map(data => { 
       return data.json(); 
      }) 
     } 

    } 

Ihre Komponente:

import { FetchData } from './datatable.service'; 
import { Component, OnInit } from '@angular/core'; 

@Component({ 
    selector: 'app-datatable', 
    templateUrl: './datatable.component.html', 
    styleUrls: ['./datatable.component.css'] 
}) 
export class DatatableComponent implements OnInit { 

    constructor(private fetchDataService: FetchData) { } 

    ngOnInit() { 
    this.fetchDataService.get().subscribe(res => { 
     console.log(response); 
    }); 
    } 

} 
+1

Ich denke, die Karte Teil mehr mit dem neuen Httpclient nicht notwendig ist, dass er verwendet. Diese Praxis wurde in früheren Versionen mit Http-Modul gemacht, aber HttpClient machte es obsolet, wenn ich mich nicht irre –

+0

Sieht aus, als ob du recht hast, ich habe die Dokumentation überprüft und ich sehe den Kartenoperator nicht mehr. – Danny908

+0

Ich habe gerade die Versionsankündigung überprüft und im offiziellen Blogpost für die Version 5 wird das auch so geschrieben [https://blog.angular.io/version-5-0-0-of-angular-now-available- 37e414935ced] (https://blog.angular.io/version-5-0-0-of-angular-now-available-37e414935ced) –