Développeur Angular évalué sur RxJS, les signals et OnPush

Angular équipe beaucoup d'applications de gestion, souvent avec un back Java ou .NET derrière. Le framework a beaucoup changé depuis les signals et les composants standalone, et l'entretien doit montrer dans quelle version d'Angular le candidat écrit réellement son code.

Recevoir la fiche complète

Mis à jour le Par l'équipe Delectus5 min de lecture

La fiche Développeur Angular : technologies, chaîne du poste, une question et la grille d'évaluation

Votre version d'Angular en production décide d'abord des questions d'entretien à poser à un développeur Angular. Angular 22, sorti en juin 2026, est la version active. Les versions 21 et 20 sont en support long terme, la 20 jusqu'à fin novembre 2026. Les composants standalone sont le mode par défaut depuis la version 19, la détection des changements sans zone.js depuis la 21, et les Signal Forms sont stables en 22. Une application restée en NgModules sur une version 15 demande un profil capable de la faire monter de version.

RxJS reste le sujet qui sépare les niveaux. Un CV qui cite RxJS ne dit pas si la personne sait choisir entre switchMap et concatMap, ni si ses abonnements se ferment. Les fuites mémoire et les requêtes en double viennent souvent de là. Depuis l'arrivée des signals, un profil à jour sait aussi quand garder un Observable et quand passer à un signal, avec toSignal et toObservable.

Interrogez la personne sur du code récent. Quelqu'un qui n'écrit que des *ngIf, des @Input et des NgModules a peut-être arrêté sa veille vers la version 15. Gênant si votre base est à jour, beaucoup moins si vous avez une montée de version à mener. Le PDF ajoute un cas de 20 minutes sur la reprise d'un écran de suivi de dossiers.

Le framework et les bibliothèques d'un développeur Angular

Composants standalone et nouveau contrôle de flux

Depuis la version 19, un composant est standalone par défaut et déclare lui-même ses dépendances, sans NgModule. Les templates utilisent @if, @for et @switch à la place de *ngIf et *ngFor, et @defer pour charger plus tard une partie de la page. Un profil à jour écrit naturellement dans cette syntaxe.

Signals

Le modèle de réactivité d'Angular : signal, computed, effect, linkedSignal, et input() pour les entrées de composant. Les signals asynchrones (resource, httpResource) chargent des données directement sous forme de signal et sont déclarés stables en version 22. Ils rendent la détection des changements plus fine.

RxJS

La bibliothèque de flux asynchrones utilisée par HttpClient, les formulaires réactifs et le routeur. Les opérateurs switchMap, concatMap, mergeMap et exhaustMap reviennent souvent en entretien. La gestion des abonnements est le premier point à vérifier.

Injection de dépendances

Angular fournit les services aux composants à travers des injecteurs organisés en arbre. providedIn: 'root' crée un service partagé, un provider dans un composant ou une route crée une instance locale. La fonction inject() remplace souvent l'injection par le constructeur dans le code récent.

Détection des changements : OnPush et zoneless

La façon dont Angular décide de mettre l'écran à jour. OnPush limite les vérifications aux changements signalés. Depuis la version 21, les nouvelles applications fonctionnent sans zone.js : Angular attend d'être prévenu par un signal, un événement ou markForCheck. Beaucoup de bugs d'affichage viennent d'une mauvaise compréhension de ce mécanisme.

Formulaires réactifs et Signal Forms

Les formulaires réactifs typés (FormGroup, FormArray, validateurs) restent la norme dans les applications de gestion. Les Signal Forms, stables en version 22, construisent le formulaire à partir de signals. Les deux cohabiteront longtemps dans les bases de code existantes.

NgRx

Une bibliothèque d'état très utilisée avec Angular : Store avec actions, reducers, effects et sélecteurs, Entity pour les collections, et SignalStore, plus léger et construit sur les signals. Une partie des offres la demande explicitement. Vérifiez que la personne sait aussi quand ne pas l'utiliser.

Routeur et HttpClient

Le routeur gère la navigation, le lazy loading (loadComponent, loadChildren) et les guards. HttpClient fait les appels à l'API, avec des intercepteurs fonctionnels pour ajouter le jeton d'authentification ou traiter les erreurs de façon centralisée.

Angular CLI et tests

La CLI crée, construit et met à jour le projet, ng update applique les migrations entre versions. Les nouveaux projets testent avec Vitest par défaut, Karma reste supporté sur l'existant. Playwright ou Cypress couvrent les parcours de bout en bout, angular-eslint le lint.

Le développeur Angular travaille souvent sur des applications appelées à durer : back-offices, portails clients, outils de gestion avec beaucoup de formulaires et de tableaux. Une bonne partie des offres est full stack, avec Java Spring Boot ou .NET côté serveur, et cite RxJS, NgRx ou les signals. Une autre part du travail consiste à faire monter une application de plusieurs versions, voire à sortir d'AngularJS, qui n'est plus maintenu depuis fin 2021. Précisez dans l'offre la version en production et le travail attendu, développement de nouveaux écrans ou reprise d'un existant.

Ce qu'un développeur Angular confirmé doit maîtriser

  • RxJS et gestion des abonnements
  • Signals et réactivité
  • Détection des changements (OnPush, zoneless)
  • Injection de dépendances et architecture
  • Formulaires réactifs et validation
  • État applicatif avec NgRx

Cinq questions d'entretien Angular, réponses commentées

Chaque question vient avec ce qu'une bonne réponse contient et le signal qui doit vous alerter. Pas besoin d'être technique pour les poser : écoutez si le candidat raconte du vécu.

  1. Question 1 · confirmé

    Un champ de recherche appelle l'API à chaque frappe. Comment écrivez-vous le flux RxJS, et pourquoi switchMap ?

    Une bonne réponsevalueChanges du contrôle, puis debounceTime, distinctUntilChanged, un filtre sur la longueur minimale et switchMap vers l'appel HTTP. switchMap annule la requête précédente quand une nouvelle saisie arrive : seule la dernière réponse compte. Le catchError se place à l'intérieur du switchMap pour qu'une erreur ne termine pas tout le flux. Il situe les autres opérateurs : concatMap met en file, mergeMap lance en parallèle sans ordre, exhaustMap ignore les nouvelles valeurs tant qu'une requête est en cours.

    Signal d'alerteUn subscribe dans un subscribe, mergeMap qui affiche les réponses dans le désordre, ou un catchError à l'extérieur qui coupe la recherche après la première erreur.

  2. Question 2 · junior à confirmé

    Comment vous assurez-vous qu'un composant ne laisse pas d'abonnements ouverts après sa destruction ?

    Une bonne réponseLe plus souvent, il ne s'abonne pas à la main : le pipe async dans le template ou toSignal gèrent la fin de l'abonnement. Pour un subscribe nécessaire, takeUntilDestroyed(), qui s'appuie sur DestroyRef. Il sait quels Observables ne se terminent jamais seuls : interval, valueChanges, un Subject, une sélection dans le store. Un appel HttpClient se termine après la réponse.

    Signal d'alerte« Angular désabonne tout seul », ou un ngOnDestroy qui ne ferme qu'une partie des abonnements.

  3. Question 3 · confirmé

    Signal ou Observable : comment choisissez-vous pour une donnée d'un composant ?

    Une bonne réponseUn signal pour un état synchrone lu dans le template : une valeur courante, des valeurs dérivées avec computed, des mises à jour ciblées de l'affichage. Un Observable pour des événements dans le temps et l'orchestration asynchrone : debounce, annulation, WebSocket, combinaison de flux. Le passage de l'un à l'autre se fait avec toSignal et toObservable, et resource ou httpResource chargent des données directement en signals. effect sert aux effets de bord vers l'extérieur, pas à recopier un signal dans un autre.

    Signal d'alerteTout convertir en signals, y compris une recherche avec debounce et annulation, ou un effect qui écrit dans un autre signal.

  4. Question 4 · confirmé

    Un composant en OnPush n'affiche pas l'élément que vous venez d'ajouter à sa liste. Pourquoi ?

    Une bonne réponseUn composant OnPush n'est revérifié que si une de ses entrées change de référence, si un événement de son template se déclenche, si un pipe async émet, si un signal lu dans le template change ou si on appelle markForCheck. Un push sur le tableau existant ne change pas sa référence. Il crée un nouveau tableau, ou passe la liste dans un signal mis à jour avec update. En zoneless, le principe est le même : Angular doit être prévenu du changement.

    Signal d'alertedetectChanges() appelé partout, retour en détection par défaut sans comprendre, ou un setTimeout qui « débloque » l'affichage.

  5. Question 5 · confirmé

    Un service est déclaré providedIn: 'root' et figure aussi dans les providers d'un composant. Combien d'instances existe-t-il ?

    Une bonne réponseUne instance à la racine, partagée par toute l'application, plus une nouvelle instance pour chaque instance du composant, visible par lui et ses enfants. Les injecteurs sont hiérarchiques : la recherche remonte depuis le composant jusqu'à la racine. C'est utile pour un état propre à un écran, et source de bugs quand on pense partager un état qui est en fait dupliqué.

    Signal d'alerte« Un service est toujours un singleton », ou aucune notion d'injecteurs hiérarchiques.

Recevez la fiche d'entretien complète en PDF

La fiche pour mener l'entretien de bout en bout, prête à imprimer ou à partager avec le manager.

  • 30 questions sur 6 axes, avec la bonne réponse, le signal d'alerte et la relance
  • Le niveau visé pour chaque question
  • Une mise en situation de 20 minutes et ce qu'on attend du candidat
  • La grille d'évaluation de 1 à 4, axe par axe

Développeur Angular : les questions des recruteurs

Quelle version d'Angular mentionner dans l'offre ?

Celle qui tourne en production, et celle visée si une montée de version est prévue. Un candidat lit très différemment « Angular 22, signals et zoneless » et « Angular 13 à faire évoluer ». La première annonce attire des profils à jour, la seconde des profils qui ont déjà mené des migrations. Écrire seulement « Angular » ne permet ni à vous ni au candidat de savoir si le poste lui correspond.

NgRx doit-il figurer sur le CV d'un développeur Angular ?

Seulement si votre application l'utilise vraiment. Un développeur confirmé qui maîtrise RxJS, les services et les signals apprend NgRx en quelques semaines. À l'inverse, un CV qui cite NgRx ne garantit pas qu'il sache quand l'éviter. Si NgRx est en place chez vous, posez les questions sur les effects et les sélecteurs. Sinon, concentrez l'entretien sur RxJS et les signals.

Comment organiser le test technique d'un développeur Angular ?

Un exercice en direct d'environ 45 minutes sur un composant existant suffit. Préparez un composant avec un subscribe imbriqué, un abonnement jamais fermé et une liste sans track, et demandez à la personne de le corriger en expliquant ses choix. Ajoutez une petite évolution, comme un filtre avec debounce. Vous voyez sa maîtrise de RxJS, sa connaissance des versions récentes et sa façon de lire du code qu'elle n'a pas écrit.

Un développeur React peut-il reprendre une application Angular ?

Oui, avec un temps d'adaptation à prévoir. Les bases du front se transfèrent : TypeScript, composants, appels API, tests. Angular demande en plus l'injection de dépendances, RxJS et ses opérateurs, les formulaires réactifs et la logique de détection des changements. Évaluez d'abord RxJS : c'est le point qui demande le plus de pratique. Pour un poste senior sur une application Angular complexe, l'expérience directe du framework reste préférable.

Pour structurer vos autres entretiens, consultez aussi nos pages sur les questions d'entretien de recrutement, la méthode de l'entretien structuré et la grille d'évaluation d'entretien.

Les fiches voisines

Toutes les fiches →

Voyez Delectus sur vos propres offres.

Commencez gratuitement. Passez à l'échelle quand vous êtes prêt.

Demander une démo

Votre ATS, connecté à Delectus

  • Workable
  • Teamtailor
  • iCIMS
  • Lever
  • SmartRecruiters
  • Jobvite
  • Greenhouse
  • Pinpoint