The SPA living form
CC-BY-NC-4.0 / Mar. 2021 / Loïc TRUCHOT
Bonus: Peut-on avoir des types typescript pour ramda ? comment ?
CLI
Pierre angulaire 1/3
<li *ngFor="let item of items; let i = index;">{{i}}. {{ item }}</li>
<div *ngIf="happy">:)</div>
<input type="range" [value]="rangeValue" />
<div>Mon chat s'appelle {{ catName }} </div>
{{ asyncData?.nom }}
Bonus: Vos passagers ont tous un visage, ils viennent tout droit de https://randomuser.me/
la liste de passagers 1/4
et custom directives
Bonus: La liste est elle même un Smart component, alors que App et Passenger sont dumbs
la liste de passagers 2/4
<app-passager
*ngFor="let passager of passagers; let i = index"
[infos]="passenger"
[id]="index">
</app-passager>
liste de passagers 3/4
Bonus: Si tous les passager sont checked in on affiche dans l'app:
<p>Mon anniversaire est le {{ birthday | date:"yMMMM" }} </p>
<div> Je voudrais bien des euros, par exemple: {{ money | currency | lowercase }} </div>
<span>Mais je veux pas {{ gift ? (gift | json ) : "rien"}}.</span>
<strong>Ce serais trop {{ "triste" | uppercase }} !</strong>
liste de passagers 4/4
Bonus: Lorsqu'on check-in, la date de check in change. elle disparait si on checkout
import { RouterModule, Routes } from '@angular/router';
const appRoutes: Routes = [
{ path: 'home', component: HomeComponent },
{ path: 'parts', component: PartsComponent },
{
path: 'part/:id',
component: HeroListComponent },
{
path: '',
redirectTo: '/home',
pathMatch: 'full'
},
{ path: '**', component: Page404Component }
];
@NgModule({
imports: [
RouterModule.forRoot(
appRoutes
)
]
})
export class AppModule {}
La directive qui marque l'emplacement du router dans l'App est <router-outlet>
<router-outlet></router-outlet>
Bonus: Il n'y a plus qu'une seule route pour les destinations, mais une partie de l'url est le param de destination
un beau voyage
Quelques belles routes:
Ces méthodes ne font pas partie du décorateur @Component... il faut les "implémenter" dans la classe (typescript)
export class Mood implements OnInit {
happy: boolean = true;
ngOnInit() {
setInterval(this.toggleHappiness, 3000)
}
toggleHappiness() {
this.happy = !this.happy
}
}
Et il y en a beaucoup:
import {
HttpClientModule
} from '@angular/common/http';
@NgModule({
imports: [
...,
HttpClientModule,
...
]
})
export class AppModule {}
Ni Fetch, ni Axios, juste Angular et moi
import { HttpClient } from '@angular/common/http';
export class Mood implements OnInit {
creatures: Observable<any>;
constructor(private http: HttpClient) { }
ngOnInit() {
this.creature = this.http.get("assets/creatures.json");
}
}
<div *ngFor="let creature of (creatures | async)">{{ creature.name }}</div>
Ajax
Bonus: Trouver une dépendance angular pour faire des beaux graphiques. Afficher quelques données de votre API sous form graphique
ng generate service livres
@Component({...})
export class BibliothequeComponent {
constructor(private _livresService: LivresService) {
}
logLivres () { console.log(this.livresService.getLivres()); }
}
import { Injectable } from '@angular/core';
@Injectable({
providedIn: 'root',
})
export class LivresService {
private _livres = ["Naruto", "Platon"];
getLivres () { return _livres; }
}
Bonus 2: Faire un bouton déclanchant 3 sons
Toujours plus fort (featuring daft punk)
Bonus: Faire des boutons stop/start/restart
Bonus 3: Effets disco + mot cliqué qui grossi et fade out
[
'work it', 'make it', 'do it', 'makes us',
'harder', 'better', 'faster', 'stronger',
'more than', 'hour', 'our', 'never',
'ever', 'after', 'work is', 'over'
]
<iframe
src="silence.mp3"
allow="autoplay"
style="width:0; height:0; position:absolute; left:-1px"
></iframe>
↓ Alternative ↓
Apprendre les langues
Bonus: Votre app permet d'apprendre 3 langues: on sélectionne sa langue maternelle, et on apprend une autre qu'on choisie
THANK'S EVERYONE
It's finally done ! See you soon