0% ont trouvé ce document utile (0 vote)
278 vues8 pages

Examen Angular : Questions et Cas Pratiques

Ce document décrit un examen portant sur le framework Angular. L'examen contient deux parties, la première avec des questions à choix multiples et la seconde une étude de cas sur le développement d'une application de randonnées avec Angular. L'énoncé guide le candidat à travers la création de composants, services, routes, templates HTML et binding de données.

Transféré par

Mehdi Sanekli
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
278 vues8 pages

Examen Angular : Questions et Cas Pratiques

Ce document décrit un examen portant sur le framework Angular. L'examen contient deux parties, la première avec des questions à choix multiples et la seconde une étude de cas sur le développement d'une application de randonnées avec Angular. L'énoncé guide le candidat à travers la création de composants, services, routes, templates HTML et binding de données.

Transféré par

Mehdi Sanekli
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

EXAMEN

Semestre : 1 2

Session : Principale Rattrapage

Module : Angular Nom : ……………………………………………


Enseignants : UP Web Prénom :…………………………………………
Classes : 5GL & 5INFOB Classe : ………………………………………….
Documents autorisés : OUI NON Nombre de pages : 08
Calculatrice autorisée : OUI NON Internet autorisée : OUI NON
Date : 02/12/2020 Heure: 11h Durée : 1h30

Partie 1 : (7 pts)
Une seule réponse est correcte
1- Soit la configuration de routes 3- Quelle est la solution proposée par
suivante : (1pt) Angular qui permet aux développeurs
d'enrichir les balises HTML? (1pt)
const routes: Routes = [
A- Les promises
{path: '**', component:
B- Les directives
ProductsComponent},
{path: 'randonnees', component: C- Les observables
ContentComponent}, D- Les décorateurs
{path: 'home', component:
ArticleComponent}, 4- Dans quels cas ce titre apparaîtra-t-il
]; dans le Template? (1pt)
En tapant l’url <h1 *ngIf=”show">Classe 5eme!</h1>
localhost :4200/randonnees , A. show = true
lequel des composants suivants sera B. show = false
affiché ? C. show= ‘true ‘
D. show = ‘false’
A- ProductsComponent
B- ContentComponent
5- Quelle directive vous permet d’assurer
C- ArticleComponent
D- Le composant AppComponent le Two way data binding.? (1pt)
2- Comment peut-on partager les données A. ngModel
entre composants qui ne sont pas B. ngForm
imbriqués? (1pt) C. ngStyle
A- Via un autre composant. D. ngSubmit
B- Via un service.
C- Via des événements.
D- Via les directives

1 /8
6. Dans le Template d’un composant ListTodo, vous avez le sélecteur suivant :

<app-todo [todo]="t"> </app-todo>. Sachant que app-todo est le sélecteur d’un


composant Todo.

a. Quelle est la relation entre le composant ListTodo et le composant Todo (1pt)


………………….……………………………………………………….. ………………….
……………………………………………………………………………………………….

b. Quelle est la propriété qui sera déclarée dans le composant Todo ? écrire le code
nécessaire pour la déclarer. (1pt)
………………….……………………………………………………….. ……………….
……………………………………………………………………………………………….

Partie 2 : Étude de cas (13 pts)


Nous allons développer la partie front-end d’une application web pour les passionnées des
randonnées avec Angular 9. Pour cela, nous proposons la hiérarchie de composants
suivante que nous allons créer tout au long de notre étude de cas.

AppComponent
app-root

navComponent ContentComponent
app-nav app-content

Localhost:4200/randonnee

RandonneComponent
Est chargé au niveau de
app-randonne
ContentComponent en
tapant le path
/randonnee
ReservationCompone
nt
app-reservation

Soit les deux modèles de données « Randonnee » et « Reservation » suivants :

2 /8
export class Randonnee { export class Reservation{
title : string; identite : string;
description: string; telephone : string;
price:number; nb:number;
date:string; }
nbPlaces:number;}

Le composant navComponent contient dans son Template le code suivant :


<a href="#">Home</a>
<a routerLink="/randonnees">Randonnées</a>
<a href="#">Sports</a>
<a href="#">Contact</a>

En cliquant sur le lien Randonnées, un composant RandonneComponent est chargé affichant


le texte « Nos randonnées : ».
1- Définissez le contenu des templates des composants AppComponent,
ContentComponent et RandonneComponent.
app.component.html (0.25 pt)

content.component.html (0.25 pt)

randonne.component.html (0.25 pt)

2- Au niveau du fichier app-routing.module.ts , configurez la route qui permet de pointer sur


le composant RandonneComponent et dont le lien correspondant est déjà défini en haut dans
navComponent (0.25 pt)
const routes: Routes = [

];
3- Soit la classe RandonneService suivante. La méthode getListRandonnes() permet de
retourner la liste des randonnées contenues un fichier json. Complétez le code qui manque
dans chaque numéro. (1.5 pt)
import { Injectable } from '@angular/core';
import { HttpClient } from 1 ;

3 /8
import { Randonnee } from './model/randonnee';
@Injectable({
providedIn: 'root'
})
export class RandonneService {
constructor(private http : 2 ){}
getListRandonnes()
{
return this._http.get< 3 >("../../assets/randonnees.json");
}
}

1 :1……………………………………………………………………………………………………………………………………………………….

22
:……………………………………………………………………………………………………………………………………………………….

3 :3……………………………………………………………………………………………………………………………………………………….

Une fois le composant RandonneComponent est chargé, la liste des randonnées contenues
dans le fichier json s’affiche comme mentionnée dans la Figure 1

Figure 1
4- Complétez par le code nécessaire pour la récupération de la liste des randonnées à partir de
la méthode getListRandonnes() du service RandonneService. (2 ,5 pts)
import { Component, OnInit } from '@angular/core';
import { RandonneService } from '../randonne.service';
@Component({
selector: 'app-randonne',

4 /8
Nom : …………………………………………………….. ……Prénom………………………………………………………………..

Classe :…………………………………………………….

templateUrl: './randonne.component.html',
styleUrls: ['./randonne.component.css']
})

export class RandonneComponent implements OnInit {


1

constructor( 2 ) { }

ngOnInit(): void { 3 }
}

……………………………………………………………………………………………………………………………………………………………
1
……………………………………………………………………………………………………………………………………………………………
2

……………………………………………………………………………………………………………………………………………………………
3

5- Complétez le code html suivant pour afficher la liste des randonnées comme indiqué dans
la Figure 1 sachant que les images possèdent l’extension « .jpg », sont stockées sous le
répertoire « ../../assets/images » et le nom de chaque image est le titre de la randonnée.
(1 .5pts)
<div *ngFor="let r of 1 ; let i=index">

2 3 <button>Details</button>

</div>

……………………………………………………………………………………………………………………………………………………………
1
……………………………………………………………………………………………………………………………………………………………
2

……………………………………………………………………………………………………………………………………………………………
3

***************************************************************************
En cliquant sur le bouton « Details » de la Figure 1 :
• Le reste des informations de la randonnée courante s’affichent comme c’est indiqué
dans la Figure 2.
• Un nouveau composant ReservationComponant sera affiché par la suite. Voir Figure
3

5 /8
Figure 2

6- Sachant que en cliquant sur le bouton Details, une méthode ayant comme signature
showDetails(i :number) est appelée, écrivez alors le code de cette méthode et mettez
à jour, si c’est nécessaire, les propriétés de la classe RandonneComponent.(1 pt)
……………………………………
showDetails(i:number){

……………………….

7- Complétez le code html suivant du composant RandonneComponent pour aboutir


au résultat de la Figure 2. Il suffit de rajouter la condition nécessaire pour l’affichage
du reste des informations d’une randonnée. (1 pt)

<div *ngFor="let r of list; let i=index">


(Contenu déjà demandé dans la question 5)
<button (click)="showDetails(i)">Details</button>
<div * >
<ul>

6 /8
<li>{{r.description}}</li>
<li>{{r.price}} dt</li>
<li>{{r.date}}</li>
<li>{{r.nbPlaces}}</li>
</ul>
</div>
</div>

……………………………………………………………………………………………………………………………………………………….
*

***************************************************************************
Un nouveau composant appelé ReservationComponent est créé et ajouté dans la vue du
composant RandonneComponent. Ce composant contient un formulaire de réservation à la
randonnée correspondante et s’affiche aussi en cliquant sur le bouton Details. Voir Figure 3

Figure 3
8- Le champ « Identité » du formulaire de réservation est obligatoire. Si ce champ est vide
alors le message « Veuillez écrire votre nom et prénom » s’affiche. Complétez alors le code
HTML suivant : (2pt)

7 /8
<form #f="ngForm">
<label>Identité</label>
<input type="text" 1>
<div 2 >
1
Veuillez écrire votre nom et prénom
</div>

</form>

……………………………………………………………………………………………………………………………………………………………
1

12
……………………………………………………………………………………………………………………………………………………………

10- Le bouton « Réserver » de la Figure 3 est désactivé si le formulaire de réservation est


invalide. Mettez à jour le code html du composant ReservationComponent en ajoutant le
code nécessaire au niveau du bouton « Réserver » (1 pt)
<button type="submit" * > Réserver</button>

……………………………………………………………………………………………………………………………………………………….
*

11- En cliquant sur le bouton « Réserver », cette réservation est ajoutée dans une liste des
réservations définit dans le composant RandonneComponent, listReservations :
Reservation[]. Mettez à jour la classe du composant ReservationComponent en indiquant
uniquement le code utile pour répondre à cette question. (1,5 pts)

Bon Travail ☺

8 /8

Vous aimerez peut-être aussi