This project was generated with Angular CLI version 7.0.4.
Run ng serve
for a dev server. Navigate to http://localhost:4200/
. The app will automatically reload if you change any of the source files.
- Template Driven Form
- Model Driven Form (Reactive Form)
- Appel HTTP
- Service
- Routing
- Route resolver
- Guard
- Directive
- Custom directive
- Pipe
- Custom pipe
- @Input
- @Output
L'URL de base de l'API est https://opentdb.com/api.php, elle doit être complété avec une query string, acceptant 4 paramètres :
- amount : nombre de questions à récupérer (max
50
) - category : identifiant de la catégorie (entre
9
et32
voir api_category.php) - difficulty : difficulté des questions (
easy
,medium
,hard
) - type : type de réponse, vrai ou faux (
boolean
) ou multiple (multiple
)
Le formulaire doit permettre de recherche des questions sur l'API : https://opentdb.com/. Il sera composé des champs suivants :
- un champ
Nombre de question
de typenumber
et doit être requis. - un champ
Categorie
de typetext
. - un champ
Difficulté
de typetext
. - un champ
Type
de typetext
. - un bouton
Afficher
de typesubmit
. - un bouton
Annuler
de typereset
.
A l'envoie du formulaire, génère l'url d'appel à l'API et affiche la dans la console de ton navigateur. L'URL devrait ressembler à quelque chose comme :
- https://opentdb.com/api.php?amount=25
- https://opentdb.com/api.php?difficulty=hard&type=boolean&amount=25
- https://opentdb.com/api.php?amount=12&difficulty=medium&category=9&type=boolean
- https://opentdb.com/api.php?type=multiple&amount=25&category=9&difficulty=easy ...
BONUS :
- Utilise la balise
<select>
pour les champsDifficulté
,Type
(code les valeurs en durs). - Fait appel à l'api https://opentdb.com/api_category.php pour récupérer la liste des catégories et remplis la balise
<select>
.
Refait le même formulaire (dans un nouveau component) mais cette fois en utilisant un reactive form
(FormGroup, FormControl) si tu avais fait un template driven form
(ngModel), sinon fais l'inverse.
- Créer un service avec une méthode
search
, elle prendra en paramètre les paramètres nécessaire pour générer l'URL précédente. - Tu peux déporter le code qui te servait à générer l'URL dans ton service.
- Injecte le service
HttpClient
, utilise le pour intérroger l'API avec l'url générée et affiche les questions récupérés en dessous de ton formulaire.
ATTENTION ! L'URL généré ne renvois pas forcement de question en fonction des critères renseignés
Créer un nouveau composant question-detail
dont la responsabilité sera d'afficher une question. Ce composant aura une entrée @Input
correspondant au formulaire à afficher (excatement comme dans le checkpoint 2 avec les pokemons).
Créer un formulaire d'authentification avec les champs suivants :
Username
de type string et doit être requisPassword
de type password et doit être requis.
L'envoie du formulaire doit être déclenché par l'événement ngSubmit
de la directive ngForm
(pour l'instant l'envoie du formulaire ne déclenche pas d'operation).
Créer un service, qui comportera deux méthodes :
login
qui vérifira le valeur du champUsername
etPassword
(libre à toi de choisir la condition). Une fois la condidition validé, ajoute une variableisLogin
atrue
dans lesessionStorage
oulocalStorage
pour sauvgarder le login. La fonction doit aussi renvoyertrue
si l'autentification réussi sinonfalse
.logout
supprimera la valeur dans lesessionStorage
oulocalStorage
.
Injecte ton service dans ton formulaire d'autentifcation, à l'envoie utilise ton service pour vérifier les valeurs saisies. A l'aide du Storage Inspetor
de ton navigateur vérifie si isLogin
a bien été ajouté.
BONUS :
- Au lieu de retourner un boolean, retourne un observable qui en cas de succés renvoie
true
dans le callbacknext
sinon renvoiefalse
dans le callbackerror
Ressources :
- router guide
- API Router navigate
- API NavigationExtras queryParams
- queryParams
- routerLink directive
- route resolver
Créer 3 routes et un menu :
/login affiche le formulaire d'authentification.
- Si l'authentification est un succés tu dois renvoyer l'utilisateur sur la route
/search
. - Sinon reste sur la route
/login
mais indique à l'utilisateur que l'autentification a échoué (en affichant un message en dessous du formulaire).
/search qui affiche le formulaire de recherche.
/result qui affiche le résultat de la recherche.
Plusieurs possibilités s'offre à toi :
- Récuperer le résultat de l'API dans le formulaire de recherche et ensuite envoyer les données vers la page de resultat pour afficher les questions.
- Envoyer les paramètres vers la page de résultat via la propriété
queryParams
et ce sera le composant de cette page qui se chargera d'appeler l'API avec les bons paramètres - Envoyer les paramètres vers la page de résultat via la propriété
queryParams
et ce sera la route via un route resolver (avant le chargement du composant) qui se chargera d'appeler l'API avec les bons paramètres
Créer un composant menu qui sera afficher sur chaque route, il te permettera de naviguer entre les différentes vues de ton application à l'aide de la directive routerLink
.
- Tu devrais au minimum avoir trois items "login/logout", "search", "result".
- Si l'utilisateur n'est pas authentifié seul l'item "login" est affiché.
- Si l'utilisateur est authentifié l'item "login" devient "logout" et les items "search" et "result" sont affichés.
Ressources :
Créé une classe (représentant un "guard", tu peux utiliser le CLI Angular) qui implémentera l'interface CanActivate
ainsi que la méthode canActivate(..)
(n'oublis pas l'annotation @Injectable()
).
- La méthode
canActivate
utilisera le service d'authentification pour authorizer/refuser l'accès à une route, selon si l'utilisateur est authentifié ou non. - Protège ensuite les routes
/search
et/result
avec le "guard" créer précédemment.
Test si ton guard fonctionne bien, n'oublis pas de te déconnecter ou de supprimer la variable isLogin
a l'aide du Storage Inspetor
Run ng build
to build the project. The build artifacts will be stored in the dist/
directory. Use the --prod
flag for a production build.
Run ng test
to execute the unit tests via Karma.
Run ng e2e
to execute the end-to-end tests via Protractor.
To get more help on the Angular CLI use ng help
or go check out the Angular CLI README.