Search code examples
jsonangularangular-httpangular-httpclient

Display Subscribe Data in Angular 4


I need help in displaying the output of subscribe from an api in Angular 4. How can i do this since I wrote data.data.data but it says property data doesnt exist on type object. How would i output it in the browser? Here's my code below and the api picture below

enter image description here

import { Component, OnInit } from '@angular/core';
import { NewsService } from '../news.service';

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

  constructor(private newsService: NewsService) { }

  ngOnInit() {

    this.newsService.getNews()
      .subscribe(
        data => {
          alert("News Success");
          console.log(data);
        },
        error => {
          alert("ERROR");
        });
  }
}

Solution

  • create a property in component

    myData: any[] = [];
    

    and in your subscriber function

    import { Component, OnInit } from '@angular/core';
    import { NewsService } from '../news.service';
    
    @Component({
      selector: 'app-news-list',
      templateUrl: './news-list.component.html',
      styleUrls: ['./news-list.component.css']
    })
    export class NewsListComponent implements OnInit {
    
      constructor(private newsService: NewsService) { }
    
      ngOnInit() {
    
        this.newsService.getNews()
          .subscribe(
            (res: any) => {
              alert("News Success");
              this.myData = res.data; 
              // Where you find the array res.data or res.data.data
              console.log('res is ', res.data);
            },
            error => {
              alert("ERROR");
            });
          }
        }
    

    and in your template

    1) option to view JSON

    <pre>{{myData | json}}</pre>
    

    2) option to loop if you got the array

    <div *ngFor="let d of myData">
        {{d}}
    </div>