Post #28 Angular Api

Odświeżenie wiadomości i kodu Angular. Dowiedziałem się że właśnie jest stabilna v 18 wprowadzająca dużo zmian.

Treść zadania do Aplikacji Angular

Job Task Używając modułu HttpModule w Angular 2+, napisz fragment kodu, który z poniższego API pobierze drugi element o statusie 'pending’. Ocenimy także jakość i wydajność Twojego rozwiązania. Link do API: API To Do

Realizacja

Stworzyłem nową Aplikację Angular w wersji 14 i metodę fetch wraz z filtrem wyników. Dodatkowo stworzę rozwiązanie z Service i Subscribe,

Kod Obecnej aplikacji

Dodany jest Bootstrap jako UI oraz Component Api wraz z routerem

// Router

import { NgModule } from '@angular/core';
import { RouterModule, Routes } from '@angular/router';
import { HomeComponent } from './components/home/home.component';
import { ApiComponent } from './components/api/api.component';

const routes: Routes = [
  { path: 'home', component: HomeComponent },
  { path: 'api', component: ApiComponent }
];

@NgModule({
  imports: [RouterModule.forRoot(routes)],
  exports: [RouterModule]
})
export class AppRoutingModule { }

// App Module

import { NgModule } from '@angular/core';
import { BrowserModule } from '@angular/platform-browser';
import { HttpClientModule } from '@angular/common/http';

import { AppRoutingModule } from './app-routing.module';
import { AppComponent } from './app.component';
import { HomeComponent } from './components/home/home.component';
import { ApiComponent } from './components/api/api.component';
import { NavComponent } from './components/nav/nav.component';

@NgModule({
  declarations: [
    AppComponent,
    HomeComponent,
    ApiComponent,
    NavComponent
  ],
  imports: [
    BrowserModule,
    AppRoutingModule,
    HttpClientModule
  ],
  providers: [],
  bootstrap: [AppComponent]
})
export class AppModule { }

// API-Components

import { HttpClient } from '@angular/common/http';
import { Component, OnInit } from '@angular/core';
import { Observable } from 'rxjs';
import { filter, map, tap } from 'rxjs/operators';

interface Task {
  id: number;
  user_id: number;
  title: string;
  due_on: string;
  status: string;
}

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

  tasks: Task[] = [];
  secondPendingTask: Task | undefined;

  constructor(private http: HttpClient) { }

  ngOnInit(): void {
    this.getSecondPendingTask()
      .subscribe(task => {
        this.secondPendingTask = task;
      }, error => {
        console.error('Error fetching task:', error);
      });
  }

  getSecondPendingTask(): Observable<Task> {
    return this.http.get<Task[]>('https://gorest.co.in/public/v2/todos')
      .pipe(
        // Filter tasks with status 'pending'
        filter(tasks => tasks.length > 1 && tasks[1].status === 'pending'),
        // Map to the second pending task (if found)
        map(tasks => tasks[1]),
        // Handle the case where no second pending task exists
        tap(task => {
          if (!task) {
            console.log('No second pending task found');
          }
        })
      );
  }
}



Kod Html Api-component

<h1 class="display-4">API</h1>
<p class="lead">Api works!</p>

<div class="bg-light">
  <ul class="list-unstyled">
    <li *ngIf="secondPendingTask">
      (task Id: {{ secondPendingTask.id}}) **Second Pending Task:** <span>{{ secondPendingTask.title }} </span> (status:
      {{ secondPendingTask.status }})
    </li>
    <li *ngIf="!secondPendingTask">
      No second pending task found.
    </li>
  </ul>
</div>


Krótka instrukcja krok po kroku

  1. Importuj moduł HttpClient z @angular/common/http w pliku api.component.ts.
  2. Wstrzyknij HttpClient do konstruktora komponentu.
  3. Stwórz metodę, która będzie wywoływać API za pomocą metody get() z HttpClient.
  4. Wywołaj tę metodę w cyklu życia komponentu, np. ngOnInit().
  5. Przechowaj odpowiedź z API w zmiennej w komponencie.
  6. Wyświetl dane w szablonie komponentu za pomocą dyrektywy *ngFor.

Nie przegap!

Nie spamujemy! Przeczytaj naszą politykę prywatności, aby uzyskać więcej informacji.

Komentarze

Dodaj komentarz