From 7c516a7e58f48e720afb4bc3ebc2a5571230d466 Mon Sep 17 00:00:00 2001 From: Israel de la Barrera Date: Sun, 22 May 2022 11:17:39 +0200 Subject: [PATCH] feat(angular): add data fetch example (#85) --- .../1-fetch-data/angular/user.d.ts | 56 +++++++++++++++++++ .../1-fetch-data/angular/user.service.ts | 25 +++++++++ .../1-fetch-data/angular/users.component.html | 16 ++++++ .../1-fetch-data/angular/users.component.ts | 16 ++++++ .../1-fetch-data/angular/users.module.ts | 19 +++++++ 5 files changed, 132 insertions(+) create mode 100644 content/7-webapp-features/1-fetch-data/angular/user.d.ts create mode 100644 content/7-webapp-features/1-fetch-data/angular/user.service.ts create mode 100644 content/7-webapp-features/1-fetch-data/angular/users.component.html create mode 100644 content/7-webapp-features/1-fetch-data/angular/users.component.ts create mode 100644 content/7-webapp-features/1-fetch-data/angular/users.module.ts diff --git a/content/7-webapp-features/1-fetch-data/angular/user.d.ts b/content/7-webapp-features/1-fetch-data/angular/user.d.ts new file mode 100644 index 0000000..8bb8df7 --- /dev/null +++ b/content/7-webapp-features/1-fetch-data/angular/user.d.ts @@ -0,0 +1,56 @@ +export interface User { + gender: string; + name: { + title: string; + first: string; + last: string; + }; + location: { + street: { + number: number; + name: string; + }; + city: string; + state: string; + country: string; + postcode: number; + coordinates: { + latitude: string; + longitude: string; + }; + timezone: { + offset: string; + description: string; + }; + }; + email: string; + login: { + uuid: string; + username: string; + password: string; + salt: string; + md5: string; + sha1: string; + sha256: string; + }; + dob: { + date: Date; + age: number; + }; + registered: { + date: Date; + age: number; + }; + phone: string; + cell: string; + id: { + name: string; + value: string; + }; + picture: { + large: string; + medium: string; + thumbnail: string; + }; + nat: string; + } \ No newline at end of file diff --git a/content/7-webapp-features/1-fetch-data/angular/user.service.ts b/content/7-webapp-features/1-fetch-data/angular/user.service.ts new file mode 100644 index 0000000..157bc91 --- /dev/null +++ b/content/7-webapp-features/1-fetch-data/angular/user.service.ts @@ -0,0 +1,25 @@ +import { HttpClient } from '@angular/common/http'; +import { Injectable } from '@angular/core'; +import { catchError, map, Subject } from 'rxjs'; +import { User } from './user'; + +@Injectable({ + providedIn: 'root' +}) + +export class UserService { + error$: Subject = new Subject(); + + private users$ = this.HttpClient.get<{results: User[]; info: any}>('https://randomuser.me/api/?results=3') + .pipe( + map(x => x.results), + catchError(e => {this.error$.next(e); return []}) + ); + + constructor(private HttpClient: HttpClient) {} + + getUsers() { + return this.users$; + } + +} diff --git a/content/7-webapp-features/1-fetch-data/angular/users.component.html b/content/7-webapp-features/1-fetch-data/angular/users.component.html new file mode 100644 index 0000000..b60813a --- /dev/null +++ b/content/7-webapp-features/1-fetch-data/angular/users.component.html @@ -0,0 +1,16 @@ + + + +

+ An error occured while fetching users +

+
+ + + Fetching users... + \ No newline at end of file diff --git a/content/7-webapp-features/1-fetch-data/angular/users.component.ts b/content/7-webapp-features/1-fetch-data/angular/users.component.ts new file mode 100644 index 0000000..a02cac8 --- /dev/null +++ b/content/7-webapp-features/1-fetch-data/angular/users.component.ts @@ -0,0 +1,16 @@ +import { Component } from '@angular/core'; +import { Observable } from 'rxjs'; +import { User } from './user'; +import { UserService } from './user.service'; + +@Component({ + selector: 'app-users', + templateUrl: './users.component.html' +}) +export class UsersComponent { + users$: Observable + + constructor(public userService: UserService) { + this.users$ = this.userService.getUsers(); + } +} diff --git a/content/7-webapp-features/1-fetch-data/angular/users.module.ts b/content/7-webapp-features/1-fetch-data/angular/users.module.ts new file mode 100644 index 0000000..892c635 --- /dev/null +++ b/content/7-webapp-features/1-fetch-data/angular/users.module.ts @@ -0,0 +1,19 @@ +import { NgModule } from '@angular/core'; +import { BrowserModule } from '@angular/platform-browser'; + +import { HttpClientModule } from '@angular/common/http'; +import { UserService } from './user.service'; +import { UsersComponent } from './users.component'; + +@NgModule({ + declarations: [ + UsersComponent + ], + imports: [ + BrowserModule, + HttpClientModule + ], + providers: [UserService], + bootstrap: [UsersComponent] +}) +export class UsersModule { }