Préparation d'entretien 100% Gratuit angularforall.com

AngularJS — Entretien Débutant

Angularjs Debutant Quiz-Angularjs-Debutant Ng-Model Ng-Repeat Scope Angularjs-Directives Angularjs-Filtres Two-Way-Binding Apprendre-Angularjs Questions-Entretien-Angularjs Qcm-Angularjs Javascript Legacy-Frontend
Débutant 🔀 Mixte 20 questions ⏱ 15 min
📝

AngularJS — Entretien Débutant

20 questions sur les bases d'AngularJS 1.x : ng-app, ng-controller, ng-model, ng-repeat, $scope, filtres, directives essentielles et data binding. Idéal avant un premier entretien.

20 questions ⏱ ~15 min Niveau Débutant

Partager

Banque de révision : les 60 questions corrigées

Voici l'intégralité des 60 questions de « AngularJS — Entretien Débutant », chacune avec sa bonne réponse et son explication. Le quiz interactif ci-dessus en tire une sélection aléatoire à chaque tentative — utilisez cette liste complète pour réviser.

  • Un framework CSS développé par Google
  • Un framework JavaScript MVC développé par Google (bonne réponse)
  • Une bibliothèque JavaScript comme jQuery
  • Un langage de programmation côté serveur
Explication : AngularJS (version 1.x) est un framework JavaScript MVC (Model-View-Controller) développé par Google. Il est distinct d'Angular 2+ qui est une réécriture complète. AngularJS étend le HTML avec des directives personnalisées et lie les données au DOM via le data binding bidirectionnel.
Précisez toujours la distinction entre AngularJS (1.x) et Angular (2+) en entretien — c'est une question fréquente pour vérifier votre précision technique.

  • ng-init
  • ng-controller
  • ng-app (bonne réponse)
  • ng-start
Explication : La directive ng-app désigne l'élément racine de l'application AngularJS. Elle est généralement placée sur la balise <html> ou <body> et déclenche le processus de bootstrap d'Angular.

  • ng-bind
  • ng-value
  • ng-link
  • ng-model (bonne réponse)
Explication : ng-model établit une liaison bidirectionnelle (two-way binding) entre un élément de formulaire (input, select, textarea) et une propriété du $scope. Toute modification dans le champ met à jour la variable, et vice versa.

  • Il n'y a aucune différence, ils sont interchangeables
  • ng-bind évite le flash de contenu non compilé (FOUC) lors du chargement (bonne réponse)
  • ng-bind supporte les expressions complexes, pas {{ }}
  • ng-bind est déprécié depuis AngularJS 1.3
Explication : Les deux affichent une valeur du scope, mais ng-bind évite le flash de contenu non rendu (FOUC — Flash Of Uncompiled Content) visible en cas de chargement lent. Avec {{ expression }}, le navigateur affiche brièvement le texte brut avant qu'Angular le compile. ng-bind masque l'élément jusqu'à la compilation.
Utilisez ng-bind sur les éléments visibles au-dessus de la ligne de flottaison pour éviter le FOUC. Mentionnez ce comportement en entretien pour démontrer votre maîtrise des performances.

  • angular.createModule("monApp", [])
  • angular.module("monApp", []) (bonne réponse)
  • new angular.Module("monApp")
  • angular.define("monApp", [])
Explication : On crée un module avec angular.module("nom", [dependencies]). Le deuxième argument est un tableau des modules dépendants (peut être vide []). Pour récupérer un module existant, on utilise angular.module("nom") sans le tableau.

  • app.controller("MonCtrl", function($scope) { }) (bonne réponse)
  • app.createController("MonCtrl", function($scope) { })
  • new Controller("MonCtrl", function($scope) { })
  • angular.controller("MonCtrl", function($scope) { })
Explication : On définit un contrôleur avec la méthode .controller() du module : app.controller("NomCtrl", function($scope) { ... }). Le $scope est injecté automatiquement et sert de pont entre le contrôleur et le template.

  • Un service pour gérer les requêtes HTTP
  • L'objet qui fait le lien entre le contrôleur et le template (bonne réponse)
  • Un filtre pour transformer les données
  • La configuration globale de l'application
Explication : Le $scope est l'objet JavaScript qui sert de contexte d'exécution pour les expressions dans les templates. Il contient les données (modèle) et les méthodes exposées au template. Il forme une hiérarchie reflétant la structure des contrôleurs imbriqués.
Expliquez que $scope suit un modèle de prototypage JavaScript pour l'héritage. Les contrôleurs enfants héritent du scope parent, mais les primitives doivent être évitées au profit d'objets.

  • ng-for
  • ng-each
  • ng-repeat (bonne réponse)
  • ng-loop
Explication : ng-repeat crée une copie de l'élément HTML pour chaque élément du tableau ou de l'objet spécifié. Exemple : <li ng-repeat="item in items">{{ item.name }}</li>. Elle expose aussi des variables spéciales comme $index, $first, $last.

  • ng-hide
  • ng-show
  • ng-if (bonne réponse)
  • ng-display
Explication : ng-if supprime ou recrée l'élément dans le DOM selon la condition. Contrairement à ng-show/ng-hide qui utilisent CSS (visibility), ng-if crée un nouveau scope enfant et recompile l'élément à chaque changement.

  • ng-show est plus rapide que ng-if dans tous les cas
  • ng-show masque l'élément via CSS ; ng-if le supprime du DOM (bonne réponse)
  • ng-if crée un scope partagé, ng-show crée un scope isolé
  • Il n'y a aucune différence fonctionnelle entre les deux
Explication : ng-show/ng-hide ajoutent/retirent la classe CSS ng-hide (display:none) — l'élément reste dans le DOM. ng-if supprime physiquement l'élément du DOM quand la condition est false, et le recrée (avec un nouveau scope enfant) quand elle devient true.
ng-show est préférable quand l'élément change souvent d'état (évite recreate). ng-if est meilleur pour les éléments rarement affichés (économise la mémoire et les watchers).

  • {{ name | uppercase() }}
  • {{ name.uppercase }}
  • {{ name | uppercase }} (bonne réponse)
  • {{ uppercase(name) }}
Explication : La syntaxe des filtres en AngularJS utilise le pipe | : {{ expression | nomFiltre }}. Pour un filtre avec paramètres : {{ expression | nomFiltre:param1:param2 }}. Ex : {{ prix | currency:"€" }}.

  • ng-date
  • dateFormat
  • date (bonne réponse)
  • formatDate
Explication : Le filtre date formate un timestamp ou objet Date. Exemples : {{ dateObj | date:"dd/MM/yyyy" }}, {{ dateObj | date:"fullDate" }}. Il accepte des formats prédéfinis (shortDate, mediumDate, etc.) ou personnalisés.

  • En la déclarant directement dans le HTML
  • En l'ajoutant sur l'objet $scope dans le contrôleur (bonne réponse)
  • En utilisant la directive ng-function
  • En la déclarant dans le module avec app.method()
Explication : Pour qu'une méthode soit accessible dans le template, elle doit être attachée au $scope dans le contrôleur : $scope.maFonction = function() { ... };. Elle peut ensuite être appelée depuis le template avec ng-click="maFonction()" ou {{ maFonction() }}.
Préférez les contrôleurs "as" syntax (controllerAs) pour éviter les ambiguïtés de scope lors d'imbrications. C'est une pratique recommandée dans les grandes applications.

  • ng-event="click"
  • ng-onclick
  • ng-click (bonne réponse)
  • on-click
Explication : ng-click évalue une expression AngularJS quand l'utilisateur clique sur l'élément. Exemple : <button ng-click="saveItem()">Sauvegarder</button>. Elle appelle automatiquement $scope.$apply() pour déclencher le cycle digest.

  • ng-action="submit()"
  • ng-submit="submit()" (bonne réponse)
  • on-submit="submit()"
  • form-submit="submit()"
Explication : ng-submit sur une balise <form> évalue une expression quand le formulaire est soumis. Elle remplace le comportement par défaut du navigateur (rechargement de page). Exemple : <form ng-submit="onSubmit()">.

  • $http("GET", "/api/data")
  • $http.get("/api/data").then(function(response) { }) (bonne réponse)
  • fetch("/api/data").then()
  • angular.http.get("/api/data")
Explication : En AngularJS, le service $http fournit des méthodes raccourcies : $http.get(url), $http.post(url, data), etc. Ces méthodes retournent des promises. Le callback .then(successFn, errorFn) traite la réponse.
Mentionnez que $http fait partie de la couche service d'AngularJS et est injectable. Précisez que response.data contient le corps de la réponse.

  • L'objet de configuration de la requête
  • Le code de statut HTTP
  • Le corps de la réponse JSON parsé (bonne réponse)
  • Les headers de la réponse
Explication : L'objet response dans le callback .then() contient : response.data (corps de la réponse, parsé si JSON), response.status (code HTTP), response.headers (fonction d'accès aux headers), response.config (config de la requête).

  • Elle définit le style CSS inline de l'élément
  • Elle ajoute ou supprime des classes CSS dynamiquement (bonne réponse)
  • Elle crée une nouvelle classe CSS
  • Elle remplace ng-style pour les animations
Explication : ng-class permet d'appliquer des classes CSS conditionnellement. Syntaxe objet : ng-class="{'classe': condition}". Syntaxe tableau : ng-class="['classe1', condition ? 'classe2' : '']". Très utile pour les états actif/inactif.

  • Une technique pour lier deux contrôleurs entre eux
  • La synchronisation automatique entre le modèle et la vue dans les deux sens (bonne réponse)
  • Un système de routage bidirectionnel
  • La communication entre un service parent et un service enfant
Explication : Le two-way binding synchronise automatiquement les données entre le modèle ($scope) et la vue (DOM). Si le modèle change, la vue se met à jour. Si l'utilisateur modifie la vue (champ input), le modèle se met à jour. C'est la fonctionnalité phare d'AngularJS implémentée via le cycle dirty-checking ($digest).
Expliquez le compromis : le two-way binding est puissant mais peut être coûteux en performance avec beaucoup de watchers (>2000 recommandé). C'est un point souvent abordé en entretien senior.

  • ng-link
  • ng-route
  • ng-href (bonne réponse)
  • ng-src
Explication : ng-href est utilisé à la place de l'attribut href standard quand l'URL contient des expressions AngularJS. Cela évite une requête HTTP avec une URL non résolue (href="{{url}}") avant qu'Angular compile le template.

  • {{ prix | currency, "€" }}
  • {{ prix | currency("€") }}
  • {{ prix | currency:"€" }} (bonne réponse)
  • {{ prix | currency(symbol="€") }}
Explication : Les arguments d'un filtre se passent avec le séparateur : : {{ expression | filtre:arg1:arg2 }}. Exemple complet : {{ nombre | number:2 }} (2 décimales), {{ date | date:"dd/MM/yyyy HH:mm" }}.

  • angular.module("app").import("ngRoute")
  • angular.module("app", ["ngRoute"]) (bonne réponse)
  • angular.require("app", ["ngRoute"])
  • angular.module("app").depends(["ngRoute"])
Explication : Les dépendances de modules se déclarent dans le tableau passé en deuxième argument de angular.module() : angular.module("monApp", ["ngRoute", "ngResource", "monModule"]). Angular charge et initialise ces modules avant le module courant.
Attention : ne pas confondre avec la récupération d'un module existant (sans tableau). angular.module("app") sans [] récupère le module ; avec [] le crée ou le recrée.

  • ng-partial
  • ng-template
  • ng-include (bonne réponse)
  • ng-import
Explication : ng-include charge et compile un template HTML externe. Exemple : <div ng-include="'header.html'"></div>. Attention : la valeur est une expression AngularJS, donc une chaîne de caractères doit être entourée de guillemets simples à l'intérieur.

  • $position
  • $count
  • $i
  • $index (bonne réponse)
Explication : Dans une boucle ng-repeat, AngularJS expose plusieurs variables spéciales : $index (index 0-based), $first (boolean), $last (boolean), $middle (boolean), $even/$odd (boolean).

  • ng-sort
  • orderBy (bonne réponse)
  • sort
  • arrange
Explication : Le filtre orderBy trie un tableau par une propriété : ng-repeat="item in items | orderBy:'nom'". Pour un tri inversé : orderBy:'-nom' (avec tiret). Il accepte aussi une fonction de tri personnalisée.
Combinez avec le filtre filter pour filtrer ET trier : ng-repeat="item in items | filter:recherche | orderBy:'nom'".

  • Il supprime les doublons du tableau
  • Il transforme chaque élément du tableau
  • Il filtre le tableau selon un critère de recherche (bonne réponse)
  • Il compte le nombre d'éléments
Explication : Le filtre filter sélectionne un sous-ensemble du tableau : ng-repeat="item in items | filter:recherche"recherche est une chaîne (cherche dans toutes les propriétés) ou un objet (cherche propriété par propriété). C'est la base des recherches en temps réel dans AngularJS.

  • ng-click="handler(event)"
  • ng-click="handler($event)" (bonne réponse)
  • ng-click="handler(this.event)"
  • ng-click="handler(e)"
Explication : Dans les directives d'événements AngularJS (ng-click, ng-keydown, etc.), l'objet événement est accessible via la variable spéciale $event : ng-click="handler($event)". C'est un objet événement DOM standard.

  • Une façon de créer des contrôleurs anonymes
  • Une alternative à $scope utilisant this dans le contrôleur (bonne réponse)
  • Un pattern de routage pour les contrôleurs
  • Une méthode pour partager des données entre contrôleurs
Explication : Avec controllerAs, au lieu d'injecter $scope, on utilise this dans le contrôleur et on préfixe dans le template : ng-controller="MonCtrl as vm". Dans le template : {{ vm.propriete }}. Cela améliore la lisibilité et évite les problèmes d'héritage de scope.
Expliquez que controllerAs est une bonne pratique recommandée par le style guide d'AngularJS (John Papa). Elle facilite aussi la migration vers Angular 2+.

  • ng-keyup
  • ng-change (bonne réponse)
  • ng-input
  • ng-onchange
Explication : ng-change s'exécute quand la valeur d'un élément de formulaire change. Elle fonctionne conjointement avec ng-model. Exemple : <input ng-model="valeur" ng-change="onValeurChange()">.

  • ng-class
  • ng-css
  • ng-style (bonne réponse)
  • ng-attr
Explication : ng-style permet d'appliquer des styles CSS inline dynamiquement. Syntaxe : ng-style="{'color': couleur, 'font-size': taille + 'px'}". La valeur est un objet JavaScript avec des propriétés CSS en camelCase ou entre guillemets.

  • Des contrôleurs réutilisables entre plusieurs vues
  • Des objets singleton injectables qui encapsulent la logique métier (bonne réponse)
  • Des directives spéciales pour les composants réutilisables
  • Des modules de configuration du routeur
Explication : Les services AngularJS sont des singletons injectables qui encapsulent la logique métier, l'accès aux données ou les fonctionnalités partagées. Ils sont créés une seule fois et réutilisés dans toute l'application. On les déclare avec .service(), .factory() ou .provider().
Insistez sur le pattern singleton : une seule instance par application. Cela les rend parfaits pour partager des états ou des données entre contrôleurs.

  • ng-href
  • ng-img
  • ng-src (bonne réponse)
  • ng-attr-src
Explication : ng-src est l'équivalent Angular de src pour les images. Il évite que le navigateur fasse une requête avec l'URL non résolue "{{imageUrl}}" avant la compilation. Similaire à ng-href pour les liens.

  • En l'ajoutant comme propriété du $scope
  • En le listant comme paramètre de la fonction contrôleur (bonne réponse)
  • En utilisant angular.inject(service)
  • En appelant $injector.get() dans le template
Explication : L'injection de dépendances se fait en listant les services comme paramètres de la fonction : app.controller("MonCtrl", function($scope, MonService, $http) { }). Angular résout automatiquement les dépendances par leur nom. Pour la minification, utilisez la notation tableau : ["$scope", "MonService", function($scope, MonService) { }].
Toujours utiliser la notation tableau ou les annotations $inject pour la minification. La notation implicite casse avec les minificateurs JS.

  • decimal
  • float
  • number (bonne réponse)
  • fixed
Explication : Le filtre number formate un nombre et accepte le nombre de décimales en paramètre : {{ 3.14159 | number:2 }} → "3.14". Il ajoute aussi des séparateurs de milliers selon la locale.

  • Elle supprime l'élément du DOM
  • Elle désactive l'élément de formulaire selon une condition (bonne réponse)
  • Elle cache l'élément de formulaire
  • Elle empêche la soumission du formulaire
Explication : ng-disabled ajoute ou retire l'attribut HTML disabled selon la valeur de l'expression booléenne. Exemple : <button ng-disabled="!formValid">Soumettre</button>.

  • Un processus de compression des templates HTML
  • Le mécanisme de vérification des changements pour mettre à jour la vue (bonne réponse)
  • Le processus d'initialisation de l'application
  • Un système de cache pour les requêtes HTTP
Explication : Le cycle $digest est le cœur du data binding d'AngularJS. Il parcourt tous les watchers enregistrés et vérifie si leurs valeurs ont changé (dirty-checking). S'il détecte des changements, il met à jour le DOM et relance le cycle jusqu'à stabilité (max 10 itérations par défaut).
Comprendre le cycle $digest est fondamental. Expliquez que chaque watcher créé par ng-bind, ng-model, etc. est vérifié à chaque cycle. Trop de watchers = application lente.

  • ng-if / ng-else-if
  • ng-switch avec ng-switch-when (bonne réponse)
  • ng-condition
  • ng-toggle
Explication : AngularJS propose ng-switch avec ng-switch-when et ng-switch-default pour l'affichage conditionnel multiple : <div ng-switch="valeur"> <p ng-switch-when="A">...</p> <p ng-switch-default>...</p> </div>.

  • Initialiser un module AngularJS
  • Évaluer une expression pour initialiser une variable de scope (bonne réponse)
  • Démarrer le serveur de développement
  • Configurer les services au démarrage
Explication : ng-init évalue une expression dans le scope courant lors de la compilation du template. Exemple : ng-init="prix = 10; nom = 'test'". Son usage est déconseillé en production — préférez initialiser les variables dans le contrôleur.

  • Angular 2+ n'est qu'une mise à jour mineure d'AngularJS
  • AngularJS est en JavaScript, Angular 2+ est une réécriture complète en TypeScript (bonne réponse)
  • Angular 2+ ajoute seulement des composants à AngularJS
  • Angular 2+ supprime le data binding bidirectionnel
Explication : Angular 2+ est une réécriture complète et incompatible avec AngularJS. Différences clés : TypeScript vs JavaScript, architecture basée sur des composants vs MVC avec $scope, système de modules ES6, RxJS/Observables vs Promises, performances améliorées avec change detection unidirectionnelle.
Ne dites jamais "Angular 3, 4, 5..." c'est juste "Angular" (2+). AngularJS désigne toujours la version 1.x. Cette distinction est cruciale en entretien.

  • ng-attribute
  • ng-bind-attr
  • ng-attr (bonne réponse)
  • ng-set-attr
Explication : ng-attr-nomAttribut permet de créer des attributs HTML dynamiques. Exemple : ng-attr-title="{{ info }}" crée title="valeur". Utile pour les attributs qui ne peuvent pas contenir d'interpolation directe (certains attributs SVG, ARIA, etc.).

  • angular.bootstrap() doit être appelé manuellement dans tous les cas
  • ng-app sur l'élément racine déclenche le bootstrap automatique (bonne réponse)
  • Le bootstrap se fait uniquement depuis un fichier local
  • ng-init démarre toujours le bootstrap
Explication : Quand AngularJS se charge, il cherche l'attribut ng-app dans le DOM. S'il le trouve, il bootstrappe automatiquement l'application depuis cet élément. Le bootstrap manuel via angular.bootstrap(element, [modules]) est possible mais rarement nécessaire.
Le bootstrap automatique convient pour la plupart des cas. Le bootstrap manuel est utile pour initialiser AngularJS après un chargement asynchrone ou pour gérer plusieurs applications sur la même page.

  • Il rend l'élément invisible
  • Il empêche la modification d'un champ tout en permettant la sélection (bonne réponse)
  • Il supprime l'élément du DOM
  • Il désactive la validation du champ
Explication : ng-readonly ajoute ou retire l'attribut HTML readonly d'un champ de formulaire selon une condition booléenne. Contrairement à ng-disabled, le champ reste focusable et sélectionnable, mais non modifiable.

  • ng-options ou ng-repeat dans un &lt;select&gt; (bonne réponse)
  • ng-select
  • ng-dropdown
  • ng-list
Explication : Pour les <select>, AngularJS fournit ng-options (plus performant, recommandé) ou ng-repeat avec des <option>. Exemple ng-options : <select ng-model="selected" ng-options="item.id as item.name for item in items">.

  • Un système qui envoie le formulaire au serveur pour validation
  • Des directives et propriétés de scope qui exposent l'état de validité du formulaire (bonne réponse)
  • Un service externe pour les expressions régulières
  • Une bibliothèque CSS pour afficher les erreurs
Explication : AngularJS intègre la validation HTML5 et expose l'état du formulaire via des propriétés sur le scope : $valid, $invalid, $dirty, $pristine, $touched. Les directives de validation incluent ng-required, ng-minlength, ng-maxlength, ng-pattern.
Mentionnez les états CSS automatiques : ng-valid, ng-invalid, ng-dirty, ng-pristine. Ils permettent de styliser les champs sans JavaScript supplémentaire.

  • ng-include
  • ng-cache
  • ng-template (bonne réponse)
  • ng-partial
Explication : <script type="text/ng-template" id="monTemplate.html"> définit un template inline mis en cache par AngularJS. Il peut ensuite être référencé par son ID dans ng-include ou les directives de routing sans faire de requête HTTP.

  • $end
  • $last (bonne réponse)
  • $final
  • $isLast
Explication : Dans ng-repeat, la variable $last est true pour le dernier élément. Similairement, $first est true pour le premier. Utile pour conditionner l'affichage : ng-if="!$last" pour afficher un séparateur sauf après le dernier élément.

  • Elle copie un template d'une directive à l'autre
  • Elle insère le contenu original de l'élément dans le template de la directive (bonne réponse)
  • Elle traduit le contenu dans plusieurs langues
  • Elle compile le HTML dynamiquement
Explication : ng-transclude est utilisée dans le template d'une directive pour indiquer où le contenu passé entre les balises de la directive doit être inséré. Elle nécessite transclude: true dans la définition de la directive.
La transclusion est l'équivalent du slot/content projection d'Angular 2+. Utile pour les composants génériques comme des boîtes de dialogue ou des panneaux.

  • $json
  • $parse
  • JSON natif (window.JSON)
  • angular.toJson() / angular.fromJson() (bonne réponse)
Explication : AngularJS fournit angular.toJson(obj) (équivalent de JSON.stringify avec nettoyage des propriétés $$hashKey) et angular.fromJson(str) (équivalent de JSON.parse). Ils peuvent être préférés car ils nettoient les propriétés internes d'Angular.

  • Copie les propriétés CSS d'un élément
  • Crée une copie profonde (deep copy) d'un objet ou tableau (bonne réponse)
  • Duplique un contrôleur
  • Clone un module AngularJS
Explication : angular.copy(source) crée une copie profonde (deep copy) d'un objet ou d'un tableau. Toutes les références imbriquées sont copiées, pas juste les références de surface. Utile pour créer une copie de travail d'un objet avant modification.

  • Étend le prototype d'AngularJS
  • Fusionne les propriétés d'un objet source dans un objet destination (bonne réponse)
  • Crée un nouveau module en étendant un module existant
  • Ajoute des directives à un module
Explication : angular.extend(destination, src) copie les propriétés de src dans destination (copie superficielle). C'est l'équivalent de Object.assign(). Pour une fusion profonde, utilisez angular.merge(destination, src).
Distinguez angular.extend() (copie shallow) et angular.merge() (copie deep). Savoir quand utiliser l'un ou l'autre démontre une bonne maîtrise.

  • valeur === "test" (bonne réponse)
  • valeur == "test"
  • angular.equals(valeur, "test")
  • Les deux premières sont équivalentes dans les templates
Explication : Les expressions AngularJS supportent l'égalité stricte === et l'égalité lâche ==. Dans les templates, {{ valeur === "test" }} est valide. angular.equals() est utile en JavaScript pour comparer des objets en profondeur.

  • Next Generation — indique une nouvelle fonctionnalité
  • C'est le namespace d'AngularJS pour éviter les conflits HTML (bonne réponse)
  • Node.js Global — référence à Node.js
  • Ce préfixe n'a pas de signification particulière
Explication : Le préfixe ng- est le namespace d'AngularJS. Il permet d'éviter les conflits avec les attributs HTML standards. C'est une convention — vous pouvez utiliser data-ng- pour une validation HTML5 stricte, ou x-ng-, ng:.
Mentionnez que data-ng- est valide HTML5. Les deux sont reconnus par AngularJS. Pour les environnements stricts, data-ng- est préféré.

  • Un objet Response directement
  • Un objet Promise (thénable) (bonne réponse)
  • Un Observable
  • Un tableau de données
Explication : $http.get() retourne un objet Promise (basé sur $q). On chaîne les callbacks avec .then(successCallback, errorCallback). Depuis AngularJS 1.6, .success() et .error() sont supprimés — utiliser uniquement .then().

  • ng-checked="false"
  • ng-disabled="condition" (bonne réponse)
  • ng-inactive="condition"
  • ng-off="condition"
Explication : ng-disabled="condition" ajoute l'attribut HTML disabled quand la condition est vraie. Fonctionne sur tous les éléments de formulaire : input, select, textarea, button.

  • $scope.$broadcast("evenement", data)
  • $scope.$emit("evenement", data) (bonne réponse)
  • $scope.$trigger("evenement", data)
  • $scope.$send("evenement", data)
Explication : $scope.$emit() envoie un événement vers le haut (du scope enfant vers le scope parent et ancestors). $scope.$broadcast() envoie vers le bas (vers tous les scopes descendants). $scope.$on("evenement", fn) écoute les événements.
La distinction $emit vs $broadcast est une question classique d'entretien AngularJS. Retenez : $emit = up (bubble), $broadcast = down (diffusion).

  • Elle convertit un objet en tableau
  • Elle vérifie si une valeur est un tableau (bonne réponse)
  • Elle crée un tableau AngularJS spécial
  • Elle trie un tableau
Explication : angular.isArray(value) retourne true si la valeur est un tableau. AngularJS fournit plusieurs helpers : angular.isObject(), angular.isString(), angular.isNumber(), angular.isFunction(), angular.isDefined(), angular.isUndefined().

  • 1.5.x
  • 1.7.x
  • 1.8.x (bonne réponse)
  • 2.0.x
Explication : AngularJS 1.8.x est la dernière version stable. La fin de vie (EOL) officielle d'AngularJS a été annoncée au 31 décembre 2021. Les projets existants peuvent encore fonctionner mais ne reçoivent plus de mises à jour de sécurité du noyau officiel.

  • C'est une limitation technique qu'Angular n'a pas pu résoudre
  • Pour des raisons de sécurité : éviter l'exécution de code arbitraire dans le contexte du scope (bonne réponse)
  • Pour améliorer les performances du cycle $digest
  • Pour assurer la compatibilité avec tous les navigateurs
Explication : Les expressions AngularJS s'exécutent dans un contexte sécurisé. Elles n'ont pas accès à window, document, alert(), etc. Pas de support pour les boucles for/while, les throw/catch, ou les déclarations de variables. Cela protège contre les injections XSS depuis les templates.
Cette limitation est intentionnelle. Pour une logique complexe, utilisez le contrôleur. Les templates doivent rester simples et déclaratifs.

  • $route.current
  • $location.path() (bonne réponse)
  • $routeParams.current
  • $state.current
Explication : $location.path() retourne le chemin actuel de l'URL. $route.current (avec ngRoute injecté) donne l'objet de la route active avec ses paramètres. $routeParams expose les paramètres de la route actuelle.

  • AngularJS est plus rapide que jQuery dans tous les cas
  • AngularJS propose une approche déclarative avec séparation modèle/vue automatique (bonne réponse)
  • AngularJS a plus de plugins disponibles que jQuery
  • AngularJS ne nécessite pas de JavaScript
Explication : AngularJS favorise une approche déclarative : vous décrivez ce que la vue doit afficher en fonction des données (modèle), Angular se charge de mettre à jour le DOM. Avec jQuery, vous manipulez le DOM impérativement. Angular encourage la séparation des responsabilités et facilite les tests.
Expliquez le paradigme : "Don't think about what DOM manipulations to make. Think about what state your application should be in. Angular will take care of the DOM." — idéal pour illustrer le changement de paradigme.