*** Extraits de code : Effectuer des requêtes HTTP standards. ***
<h2 class="header center">Ajouter un Pokémon</h2>
<pokemon-form [pokemon]="pokemon"></pokemon-form>
import { Component, OnInit } from '@angular/core';
import { Pokemon } from './pokemon';
@Component({
selector: 'add-pokemon',
templateUrl: './app/pokemons/add-pokemon.component.html'
})
export class AddPokemonComponent implements OnInit {
pokemon: Pokemon = null;
constructor() { }
ngOnInit(): void {
this.pokemon = new Pokemon();
}
}
import { InMemoryDbService } from 'angular-in-memory-web-api';
import { POKEMONS } from './pokemons/mock-pokemons';
export class InMemoryDataService implements InMemoryDbService {
createDb() {
let pokemons = POKEMONS;
return { pokemons };
}
}
import { Component } from '@angular/core';
@Component({
selector: 'pkmn-loader',
template: `
<div class="preloader-wrapper big active">
<div class="spinner-layer spinner-blue">
<div class="circle-clipper left">
<div class="circle"></div>
</div><div class="gap-patch">
<div class="circle"></div>
</div><div class="circle-clipper right">
<div class="circle"></div>
</div>
</div>
</div>
`
})
export class LoaderComponent {}
<div class="row">
<div class="col s12 m6 offset-m3">
<div class="card">
<div class="card-content">
<div class="input-field">
<input #searchBox (keyup)="search(searchBox.value)"
placeholder="Rechercher un pokémon"/>
</div>
<div class="collection">
<a *ngFor="let pokemon of pokemons$ | async"
(click)="gotoDetail(pokemon)" class="collection-item">
{{ pokemon.name }}
</a>
</div>
</div>
</div>
</div>
</div>
import { Component, OnInit } from '@angular/core';
import { Router } from '@angular/router';
import { debounceTime, distinctUntilChanged, switchMap } from 'rxjs/operators';
import { Observable, Subject, of } from 'rxjs';
import { PokemonsService } from './pokemons.service';
import { Pokemon } from './pokemon';
@Component({
selector: 'pokemon-search',
templateUrl: './app/pokemons/search-pokemon.component.html'
})
export class PokemonSearchComponent implements OnInit {
private searchTerms = new Subject<string>();
pokemons$: Observable<Pokemon[]>;
constructor(
private pokemonsService: PokemonsService,
private router: Router) { }
// Ajoute un terme de recherche dans le flux de l'Observable 'searchTerms'
search(term: string): void {
this.searchTerms.next(term);
}
ngOnInit(): void {
this.pokemons$ = this.searchTerms.pipe(
// attendre 300ms de pause entre chaque requête
debounceTime(300),
// ignorer la recherche en cours si c'est la même que la précédente
distinctUntilChanged(),
// on retourne la liste des résultats correpsondant aux termes de la recherche
switchMap((term: string) => this.pokemonsService.searchPokemons(term)),
);
}
gotoDetail(pokemon: Pokemon): void {
let link = ['/pokemon', pokemon.id];
this.router.navigate(link);
}
}