<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>EasyAngularKit</title>
    <link>https://www.easyangularkit.com</link>
    <description>Formations et articles Angular en français</description>
    <language>fr</language>
    <lastBuildDate>Tue, 28 Jul 2026 00:00:00 GMT</lastBuildDate>
    <item>
      <title>Tes composants dynamiques échouent en silence : reflectComponentType est le garde-fou que tu n&apos;utilises pas</title>
      <link>https://www.easyangularkit.com/blog/angular-reflectcomponenttype-composants-dynamiques</link>
      <description>setInput() avec un nom d&apos;input inconnu ne throw pas par défaut : un console.error NG0303 en dev, rien en prod. reflectComponentType expose le contrat réel d&apos;un composant (inputs, outputs, selector, ng-content) pour valider tes composants dynamiques et tester leur API publique sans les rendre.</description>
      <pubDate>Tue, 28 Jul 2026 00:00:00 GMT</pubDate>
      <guid>https://www.easyangularkit.com/blog/angular-reflectcomponenttype-composants-dynamiques</guid>
    </item>
    <item>
      <title>Ton `Signal&lt;T&gt;` public n&apos;est pas readonly : le bug runtime Angular que TypeScript te cache</title>
      <link>https://www.easyangularkit.com/blog/angular-signal-asreadonly-encapsulation-service</link>
      <description>Tu exposes ton state via `readonly user = this.userSignal` typé `Signal&lt;User&gt;`. En review, ça a l&apos;air propre. Au runtime, un cast d&apos;une ligne dans un composant feuille (`as WritableSignal&lt;User&gt;`) suffit pour écraser ton store : TypeScript refuse l&apos;appel direct, mais ne voit pas passer le cast. Voici les 2 faux amis d&apos;encapsulation signal, ce que `asReadonly()` protège vraiment (et ce qu&apos;il ne protège pas), et le test à ajouter pour être sûr.</description>
      <pubDate>Mon, 27 Jul 2026 00:00:00 GMT</pubDate>
      <guid>https://www.easyangularkit.com/blog/angular-signal-asreadonly-encapsulation-service</guid>
    </item>
    <item>
      <title>`enum` laisse du JavaScript derrière lui, et Node refuse déjà de l&apos;exécuter</title>
      <link>https://www.easyangularkit.com/blog/typescript-enum-union-litteraux</link>
      <description>Ton `enum` produit un objet dans ton bundle, refuse de passer dans un template Angular, et le jour où quelqu&apos;un insère un état au milieu, tes commandes déjà persistées en `Sent` redeviennent `Pending`. Node 22 refuse purement et simplement de l&apos;exécuter. Ce qu&apos;il coûte vraiment, l&apos;argument honnête en sa faveur (et pourquoi il tient moins qu&apos;on croit), et les trois patterns de remplacement.</description>
      <pubDate>Sun, 26 Jul 2026 00:00:00 GMT</pubDate>
      <guid>https://www.easyangularkit.com/blog/typescript-enum-union-litteraux</guid>
    </item>
    <item>
      <title>`readonly` n&apos;est pas un commentaire : rends la mutation impossible au lieu d&apos;y survivre</title>
      <link>https://www.easyangularkit.com/blog/typescript-readonly-immutabilite-compilation</link>
      <description>Ton `computed()` qui trie réécrit sa propre source : `.sort()` trie en place, et rien dans le type ne l&apos;en empêche. Comment déplacer l&apos;immutabilité de la discipline vers le type - `readonly`, `ReadonlyArray`, `as const` - pourquoi `Readonly&lt;T&gt;` te trahit, et pourquoi le `DeepReadonly` qu&apos;on trouve partout casse dès qu&apos;il y a une `Date` dans ton état.</description>
      <pubDate>Sun, 26 Jul 2026 00:00:00 GMT</pubDate>
      <guid>https://www.easyangularkit.com/blog/typescript-readonly-immutabilite-compilation</guid>
    </item>
    <item>
      <title>4 champs optionnels = 16 états possibles, 4 valides : passe aux unions discriminées</title>
      <link>https://www.easyangularkit.com/blog/typescript-union-discriminee-etats-impossibles</link>
      <description>Ton type d&apos;état a quatre `?`, donc seize combinaisons, dont la plupart n&apos;ont aucun sens métier. Résultat : des `!` partout, un dernier `return` poubelle, et un ordre de `if` qui tient lieu de spécification. Comment passer d&apos;un sac d&apos;optionnels à une union discriminée, ce que le narrowing te rend, les 4 pièges qui cassent le discriminant, et un piège de narrowing que les templates Angular rendent quasi inévitable (vérifié au compilateur).</description>
      <pubDate>Sun, 26 Jul 2026 00:00:00 GMT</pubDate>
      <guid>https://www.easyangularkit.com/blog/typescript-union-discriminee-etats-impossibles</guid>
    </item>
    <item>
      <title>55 KB de JS pour un fade-in : virer @angular/animations avec animate.enter et animate.leave (Angular 20.2+)</title>
      <link>https://www.easyangularkit.com/blog/angular-animate-enter-leave-remplacer-angular-animations</link>
      <description>Depuis Angular 20.2, les bindings animate.enter et animate.leave remplacent @angular/animations pour 95% des cas. Migration, pièges et bundle avant/après.</description>
      <pubDate>Fri, 24 Jul 2026 00:00:00 GMT</pubDate>
      <guid>https://www.easyangularkit.com/blog/angular-animate-enter-leave-remplacer-angular-animations</guid>
    </item>
    <item>
      <title>markForCheck() en 2026 : les 4 cas où tu peux enfin le virer (et le seul où tu dois le garder)</title>
      <link>https://www.easyangularkit.com/blog/angular-markforcheck-signals-obsolete</link>
      <description>Avec les signals partout, ChangeDetectorRef.markForCheck() ressemble à un fossile. Presque. Voici les 4 patterns où tu peux le supprimer sans risque, et le seul cas où il reste indispensable.</description>
      <pubDate>Fri, 24 Jul 2026 00:00:00 GMT</pubDate>
      <guid>https://www.easyangularkit.com/blog/angular-markforcheck-signals-obsolete</guid>
    </item>
    <item>
      <title>Ton @HostBinding avec un signal ne fait rien : le silent bug que host: {} corrige</title>
      <link>https://www.easyangularkit.com/blog/angular-hostbinding-signal-silent-bug-host-object</link>
      <description>Tu remplaces ta propriété par un signal, tu gardes ton @HostBinding, la classe reste collée à l&apos;élément host pour toujours. Aucune erreur, aucun warning. Explication du silent bug, du workaround qui ment à moitié, et de la forme canonique host: {} qui devient la référence du style guide v20+.</description>
      <pubDate>Wed, 22 Jul 2026 00:00:00 GMT</pubDate>
      <guid>https://www.easyangularkit.com/blog/angular-hostbinding-signal-silent-bug-host-object</guid>
    </item>
    <item>
      <title>ngComponentOutlet vs ngTemplateOutlet : l&apos;arbre de décision que personne ne t&apos;a donné</title>
      <link>https://www.easyangularkit.com/blog/angular-ngcomponentoutlet-vs-ngtemplateoutlet</link>
      <description>Les deux projettent quelque chose dynamiquement, alors on les confond, on prend le mauvais, et on finit par se battre contre le framework. Voici la vraie distinction : qui décide du markup, qui possède le comportement, et comment choisir en 30 secondes entre projeter un composant, projeter un template, ou passer en impératif.</description>
      <pubDate>Wed, 22 Jul 2026 00:00:00 GMT</pubDate>
      <guid>https://www.easyangularkit.com/blog/angular-ngcomponentoutlet-vs-ngtemplateoutlet</guid>
    </item>
    <item>
      <title>ngComponentOutlet en Angular 20 : rendre des composants pilotés par la donnée, sans forêt de @switch</title>
      <link>https://www.easyangularkit.com/blog/ng-component-outlet</link>
      <description>Tu as un dashboard, un feed ou un formulaire dont la composition dépend de la donnée. Tu empiles les @switch et ça devient ingérable. ngComponentOutlet rend le bon composant à partir d&apos;une classe, avec ses inputs, son injector et son contenu projeté. Version moderne, typage, registry et la limite à connaître sur les outputs.</description>
      <pubDate>Wed, 22 Jul 2026 00:00:00 GMT</pubDate>
      <guid>https://www.easyangularkit.com/blog/ng-component-outlet</guid>
    </item>
    <item>
      <title>`outputFromObservable` et `outputToObservable` : les 2 ponts que ta migration `EventEmitter` → `output()` ignore</title>
      <link>https://www.easyangularkit.com/blog/angular-output-from-observable-to-observable-interop</link>
      <description>Tu passes tes `@Output() EventEmitter` en `output()` et d&apos;un coup ton `.pipe(debounceTime())` ne compile plus, ton service RxJS ne se branche plus, et tes tests hurlent. Les deux fonctions d&apos;interop existent depuis Angular 17.3 (stables depuis la 19) mais 90% des migrations les ratent. Tour des 5 pièges qui cassent ton flux RxJS quand tu passes aux outputs signals, avec les patterns pour reprendre la main.</description>
      <pubDate>Mon, 20 Jul 2026 00:00:00 GMT</pubDate>
      <guid>https://www.easyangularkit.com/blog/angular-output-from-observable-to-observable-interop</guid>
    </item>
    <item>
      <title>Signal `equal` : pourquoi ton `set()` avec un objet ne re-render rien (et les 5 pièges qui te bouffent la journée)</title>
      <link>https://www.easyangularkit.com/blog/angular-signal-equal-custom-equality</link>
      <description>Tu appelles set() avec un nouvel objet, ton composant ne bouge pas. Ou pire : tu appelles set() avec la même valeur, et Angular re-render quand même. La fonction equal des signals est piégeuse dès que tu quittes les primitives. Tour des 5 pièges qui sabotent tes re-renders et les patterns pour reprendre la main sans casser les perfs.</description>
      <pubDate>Fri, 17 Jul 2026 00:00:00 GMT</pubDate>
      <guid>https://www.easyangularkit.com/blog/angular-signal-equal-custom-equality</guid>
    </item>
    <item>
      <title>&quot;Le lazy loading Angular ça sert à rien&quot; : 5 niveaux de découpage que tu ignores</title>
      <link>https://www.easyangularkit.com/blog/angular-lazy-loading-ca-sert-a-rien</link>
      <description>Routing, composants avec @defer, services, preloading, SSR : le lazy loading en Angular ne se limite pas à loadComponent. Voici pourquoi, quand et comment découper ton app à chaque niveau, chiffres à l&apos;appui.</description>
      <pubDate>Thu, 16 Jul 2026 00:00:00 GMT</pubDate>
      <guid>https://www.easyangularkit.com/blog/angular-lazy-loading-ca-sert-a-rien</guid>
    </item>
    <item>
      <title>Arrête de traîner Title.setTitle() dans chaque page : le pattern TitleStrategy qui centralise ton SEO</title>
      <link>https://www.easyangularkit.com/blog/angular-titlestrategy-title-service-seo</link>
      <description>Ton titre d&apos;onglet est incohérent d&apos;une page à l&apos;autre ? Un composant l&apos;oublie carrément ? Tu as éparpillé Title.setTitle() partout au lieu d&apos;utiliser TitleStrategy. Voici pourquoi le service Title tout seul est un piège, et le pattern qui règle titre + suffixe + meta description en un seul endroit.</description>
      <pubDate>Wed, 15 Jul 2026 00:00:00 GMT</pubDate>
      <guid>https://www.easyangularkit.com/blog/angular-titlestrategy-title-service-seo</guid>
    </item>
    <item>
      <title>abortSignal avec resource() : le pattern anti race condition que tout le monde oublie</title>
      <link>https://www.easyangularkit.com/blog/abortsignal-resource-race-condition</link>
      <description>Ton composant affiche le détail du mauvais utilisateur quand tu cliques vite. Ce n&apos;est pas un bug d&apos;Angular. C&apos;est une race condition classique que resource() promet de tuer... à condition d&apos;utiliser son abortSignal. Voici les 4 pièges qui te ramènent au point de départ.</description>
      <pubDate>Mon, 13 Jul 2026 00:00:00 GMT</pubDate>
      <guid>https://www.easyangularkit.com/blog/abortsignal-resource-race-condition</guid>
    </item>
    <item>
      <title>providers vs viewProviders : le service qui disparaît quand tu projettes ton contenu</title>
      <link>https://www.easyangularkit.com/blog/angular-providers-vs-viewproviders-content-projection</link>
      <description>Ton Form fournit un Validation. Ton Field l&apos;injecte. Ça marche en interne, ça pète en NG0201 quand le Field est projeté via ng-content. La différence entre providers et viewProviders tient en une règle de 3 lignes, et elle change la surface DI complète de ton composant. Démonstration, explication de la résolution, 4 patterns à connaître.</description>
      <pubDate>Fri, 10 Jul 2026 00:00:00 GMT</pubDate>
      <guid>https://www.easyangularkit.com/blog/angular-providers-vs-viewproviders-content-projection</guid>
    </item>
    <item>
      <title>SSR Angular : 4 erreurs avec `window` qui plantent ton rendu serveur (et le fix propre en 3 primitives)</title>
      <link>https://www.easyangularkit.com/blog/angular-ssr-window-document-platform-id-pieges</link>
      <description>Tu actives le SSR, ton app fonctionnait très bien. Puis `ReferenceError: window is not defined` au premier build. Ou pire : ça build, mais ton API est refetchée, tes observers restent actifs côté serveur et ton bundle SSR gonfle. Voici les 4 erreurs Angular 17+ qui te piègent avec `window` / `document` / `localStorage` et le fix propre avec `PLATFORM_ID`, `DOCUMENT` et `afterNextRender`.</description>
      <pubDate>Wed, 08 Jul 2026 00:00:00 GMT</pubDate>
      <guid>https://www.easyangularkit.com/blog/angular-ssr-window-document-platform-id-pieges</guid>
    </item>
    <item>
      <title>ng-content : 6 patterns de projection Angular qui séparent le composant réutilisable du jetable</title>
      <link>https://www.easyangularkit.com/blog/angular-ng-content-patterns-projection</link>
      <description>Tu poses un &lt;ng-content&gt; dans ton composant Card et tu penses que c&apos;est réutilisable. Sauf que le slot vide casse ton layout, l&apos;ordre de tes select te joue des tours, un &lt;ng-container&gt; disparait dans un slot à sélecteur de tag, et détecter un slot vide te force à toucher au DOM. 6 patterns concrets, tous vérifiés en test, avec du signal-based contentChild pour boucler proprement en Angular 20+.</description>
      <pubDate>Mon, 06 Jul 2026 00:00:00 GMT</pubDate>
      <guid>https://www.easyangularkit.com/blog/angular-ng-content-patterns-projection</guid>
    </item>
    <item>
      <title>prefers-reduced-motion en Angular : au-delà du reset CSS</title>
      <link>https://www.easyangularkit.com/blog/angular-prefers-reduced-motion-au-dela-du-reset</link>
      <description>Coller le reset global qui met toutes les animations à 0.01ms te donne bonne conscience, mais il rate deux choses : la motion qui portait du sens disparaît d&apos;un coup, et tout ce qui est animé en JS ou par Angular passe à travers le filet. Faire prefers-reduced-motion correctement, ancré sur du vrai code Angular 21.</description>
      <pubDate>Mon, 06 Jul 2026 00:00:00 GMT</pubDate>
      <guid>https://www.easyangularkit.com/blog/angular-prefers-reduced-motion-au-dela-du-reset</guid>
    </item>
    <item>
      <title>Tokens @theme Tailwind v4 : primitives vs sémantiques</title>
      <link>https://www.easyangularkit.com/blog/angular-tokens-theme-primitives-semantiques</link>
      <description>Un @theme qui empile 40 couleurs à plat, c&apos;est du drift garanti : chaque composant consomme la palette brute et re-thémer devient un chercher-remplacer. La vraie architecture tient en deux couches, primitives et sémantiques, et ce repo la fait tourner en prod pour thémer trois produits d&apos;un seul point.</description>
      <pubDate>Sun, 05 Jul 2026 00:00:00 GMT</pubDate>
      <guid>https://www.easyangularkit.com/blog/angular-tokens-theme-primitives-semantiques</guid>
    </item>
    <item>
      <title>CSS :has() en Angular : 5 patterns qui remplacent du JS</title>
      <link>https://www.easyangularkit.com/blog/angular-css-has-patterns-sans-javascript</link>
      <description>Chaque fois que tu ajoutes un effect() ou un [class.x] pour réagir à l&apos;état du DOM, tu écris du JavaScript que le CSS ferait mieux. :has() style un parent selon ses enfants, sans listener, sans hydratation, dès le SSR. Cinq patterns concrets, ancrés sur du vrai code Angular 21.</description>
      <pubDate>Fri, 03 Jul 2026 00:00:00 GMT</pubDate>
      <guid>https://www.easyangularkit.com/blog/angular-css-has-patterns-sans-javascript</guid>
    </item>
    <item>
      <title>`withViewTransitions()` : 6 pièges qui rendent tes transitions Angular invisibles</title>
      <link>https://www.easyangularkit.com/blog/angular-view-transitions-router-pieges</link>
      <description>Tu actives View Transitions API dans le router Angular, tu vois un flash, tu penses que ça marche. Ça ne marche pas. Voici les 6 pièges qui font que 90% des devs qui essaient View Transitions abandonnent au bout d&apos;une heure, et le pattern minimal pour des transitions natives fluides sans dépendance tierce.</description>
      <pubDate>Fri, 03 Jul 2026 00:00:00 GMT</pubDate>
      <guid>https://www.easyangularkit.com/blog/angular-view-transitions-router-pieges</guid>
    </item>
    <item>
      <title>Lazy-loader la CSS de co-branding : comment j&apos;ai retiré 2,5 Mo du bundle initial sur une app à 30 marques</title>
      <link>https://www.easyangularkit.com/blog/angular-lazy-load-css-co-branding</link>
      <description>Une app multi-marques qui charge les 30 thèmes CSS après le login alors qu&apos;un user n&apos;en verra qu&apos;un seul. On est passés de 6,5 Mo à 4 Mo de bundle initial en lazy-loadant la feuille de la marque active. Voici la ligne de décision entre token-swap global et lazy-load, et le code Angular 17+ qui va avec (resolver, injection de link, FOUC, SSR).</description>
      <pubDate>Wed, 01 Jul 2026 00:00:00 GMT</pubDate>
      <guid>https://www.easyangularkit.com/blog/angular-lazy-load-css-co-branding</guid>
    </item>
    <item>
      <title>NgTemplateOutlet en Angular 20 : 4 patterns pour construire des composants génériques 100% typés</title>
      <link>https://www.easyangularkit.com/blog/angular-ngtemplateoutlet-composants-generiques-typage</link>
      <description>Tu construis un DataTable, un Select ou un Autocomplete réutilisable avec projection de template. Ça marche, mais dans le template consumer, tout est typé any. Voici comment récupérer un context strictement typé grâce à ngTemplateContextGuard, aux composants génériques et aux signal inputs.</description>
      <pubDate>Wed, 01 Jul 2026 00:00:00 GMT</pubDate>
      <guid>https://www.easyangularkit.com/blog/angular-ngtemplateoutlet-composants-generiques-typage</guid>
    </item>
    <item>
      <title>Styles inline Angular : ce que ton lint CSS ne voit pas</title>
      <link>https://www.easyangularkit.com/blog/angular-styles-inline-vs-css-externe</link>
      <description>Coller les styles d&apos;un composant Angular en template literal, c&apos;est confortable, mais Stylelint qui tourne sur *.css ne les voit jamais : CI verte pendant que 29 composants accumulent px et hex. L&apos;arbitrage inline vs .css externe, et comment linter le CSS-in-TS.</description>
      <pubDate>Wed, 01 Jul 2026 00:00:00 GMT</pubDate>
      <guid>https://www.easyangularkit.com/blog/angular-styles-inline-vs-css-externe</guid>
    </item>
    <item>
      <title>Stylelint : arrête de reprendre tes devs sur les px en review, laisse la CI le faire</title>
      <link>https://www.easyangularkit.com/blog/stylelint-px-rem-design-system-angular</link>
      <description>Sur un gros projet Angular avec des devs qui tournent et une majorité de profils back, tu passes tes revues à répéter les mêmes remarques CSS : px au lieu de rem, hex en dur au lieu des tokens. Voici comment Stylelint transforme ces conventions en règles qui échouent la CI, avec la config exacte (px, hex, fonts) et le piège Tailwind v4 à désamorcer.</description>
      <pubDate>Wed, 01 Jul 2026 00:00:00 GMT</pubDate>
      <guid>https://www.easyangularkit.com/blog/stylelint-px-rem-design-system-angular</guid>
    </item>
    <item>
      <title>BehaviorSubject vers signals : 4 patterns à migrer (et les 2 cas où tu dois le garder)</title>
      <link>https://www.easyangularkit.com/blog/migrer-behaviorsubject-vers-signals</link>
      <description>Tes services Angular sont bourrés de BehaviorSubject ? La moitié n&apos;a plus aucune raison d&apos;exister depuis les signals. Voici 4 patterns de refacto et les 2 cas qui restent légitimes en RxJS.</description>
      <pubDate>Mon, 29 Jun 2026 00:00:00 GMT</pubDate>
      <guid>https://www.easyangularkit.com/blog/migrer-behaviorsubject-vers-signals</guid>
    </item>
    <item>
      <title>`inject()` : 4 flags qu&apos;on oublie (et qui ferment tes bugs DI hiérarchique)</title>
      <link>https://www.easyangularkit.com/blog/angular-inject-flags-di-hierarchique</link>
      <description>Optional, self, skipSelf, host. Quatre options de `inject()` qui changent radicalement la façon dont Angular résout tes dépendances. La plupart des devs n&apos;en utilisent qu&apos;une (optional) et passent à côté de 3 patterns qui débloquent les bugs de DI les plus tenaces.</description>
      <pubDate>Fri, 26 Jun 2026 00:00:00 GMT</pubDate>
      <guid>https://www.easyangularkit.com/blog/angular-inject-flags-di-hierarchique</guid>
    </item>
    <item>
      <title>toSignal() et toObservable() : 6 pièges d&apos;interop qui font crasher ton state Angular</title>
      <link>https://www.easyangularkit.com/blog/angular-tosignal-toobservable-pieges-interop</link>
      <description>Tu mélanges Signals et RxJS dans le même composant et un coup sur deux ton state se met à clignoter, à renvoyer undefined ou à manquer une valeur synchrone. Six pièges d&apos;interop bien réels avec toSignal() et toObservable(), avec le pattern qui fixe chaque cas. Valide Angular 17+.</description>
      <pubDate>Wed, 24 Jun 2026 00:00:00 GMT</pubDate>
      <guid>https://www.easyangularkit.com/blog/angular-tosignal-toobservable-pieges-interop</guid>
    </item>
    <item>
      <title>NG0100 ExpressionChanged : causes et fixes en Angular</title>
      <link>https://www.easyangularkit.com/blog/angular-ng0100-expression-changed-after-checked</link>
      <description>NG0100 ExpressionChangedAfterItHasBeenCheckedError : pourquoi cette erreur Angular surgit en dev, ce qui change en zoneless (v21) et comment la corriger.</description>
      <pubDate>Sat, 20 Jun 2026 00:00:00 GMT</pubDate>
      <guid>https://www.easyangularkit.com/blog/angular-ng0100-expression-changed-after-checked</guid>
    </item>
    <item>
      <title>HttpContext Angular : 5 patterns pour configurer tes interceptors sans header magique</title>
      <link>https://www.easyangularkit.com/blog/angular-httpcontext-interceptors-patterns</link>
      <description>Tu skips l&apos;auth avec un header X-Skip-Auth que ton interceptor lit puis supprime ? Tu désactives ton loader avec un meta non typé passé en query string ? HttpContext résout ça depuis Angular 12 : des tokens typés, scopés à une requête, lus dans n&apos;importe quel interceptor fonctionnel. 5 patterns concrets, le before/after, et comment tester.</description>
      <pubDate>Fri, 19 Jun 2026 00:00:00 GMT</pubDate>
      <guid>https://www.easyangularkit.com/blog/angular-httpcontext-interceptors-patterns</guid>
    </item>
    <item>
      <title>Zod parse vs safeParse : lequel choisir en Angular</title>
      <link>https://www.easyangularkit.com/blog/zod-parse-vs-safeparse</link>
      <description>parse() lance une exception, safeParse() retourne un résultat typé. Quand choisir l&apos;un ou l&apos;autre en Angular : API, HttpClient, httpResource, formulaires.</description>
      <pubDate>Thu, 18 Jun 2026 00:00:00 GMT</pubDate>
      <guid>https://www.easyangularkit.com/blog/zod-parse-vs-safeparse</guid>
    </item>
    <item>
      <title>Angular SSR : 4 erreurs qui font fetcher ton API deux fois (et coûtent 800ms à ton TTI)</title>
      <link>https://www.easyangularkit.com/blog/angular-ssr-double-fetch-transfer-state</link>
      <description>Ton SSR rend la page côté serveur, puis ton client refetch la même API au mount. Bravo, tu paies deux fois et ton Time To Interactive prend 800ms dans la tronche. Voici les 4 erreurs Angular 17+ qui causent le double-fetch en SSR et comment chaque correction prend moins de 5 lignes.</description>
      <pubDate>Wed, 17 Jun 2026 00:00:00 GMT</pubDate>
      <guid>https://www.easyangularkit.com/blog/angular-ssr-double-fetch-transfer-state</guid>
    </item>
    <item>
      <title>Vitest config Angular : setup, jsdom et couverture de code</title>
      <link>https://www.easyangularkit.com/blog/configurer-vitest-angular-couverture</link>
      <description>Vitest config Angular : anatomie de vitest.config.ts, fichier test-setup, environnement jsdom, couverture v8 et seuils. Le guide complet pour bien configurer.</description>
      <pubDate>Wed, 17 Jun 2026 00:00:00 GMT</pubDate>
      <guid>https://www.easyangularkit.com/blog/configurer-vitest-angular-couverture</guid>
    </item>
    <item>
      <title>Karma to Vitest : migrer ses tests Angular sans douleur</title>
      <link>https://www.easyangularkit.com/blog/migrer-karma-vitest-angular</link>
      <description>Karma to Vitest : pourquoi et comment migrer tes tests Angular vers Vitest. Équivalences Jasmine, builder officiel, pièges zoneless et tableau comparatif.</description>
      <pubDate>Wed, 17 Jun 2026 00:00:00 GMT</pubDate>
      <guid>https://www.easyangularkit.com/blog/migrer-karma-vitest-angular</guid>
    </item>
    <item>
      <title>canMatch vs canActivate : pourquoi ton guard HTTP marche en cliquant mais casse en collant l&apos;URL</title>
      <link>https://www.easyangularkit.com/blog/angular-canmatch-vs-canactivate-guard-http</link>
      <description>Ton guard avec un appel HTTP fonctionne quand tu navigues par les liens, et part en 404 quand tu colles l&apos;URL directement ? Tu l&apos;as mis dans canMatch au lieu de canActivate. Les deux ne tournent pas dans la même phase du Router, et l&apos;un échoue en silence. Explication, signature de diagnostic, et le before/after qui répare.</description>
      <pubDate>Tue, 16 Jun 2026 00:00:00 GMT</pubDate>
      <guid>https://www.easyangularkit.com/blog/angular-canmatch-vs-canactivate-guard-http</guid>
    </item>
    <item>
      <title>Router Angular : les 17 events de navigation et pourquoi ton loader tourne dans le vide</title>
      <link>https://www.easyangularkit.com/blog/angular-router-events-navigation-cycle</link>
      <description>Ton spinner de navigation tourne à l&apos;infini sur un guard qui refuse ? Ton resolver annule la navigation en silence et personne ne comprend pourquoi ? Le cycle d&apos;events du Router Angular explique tout : la séquence complète, ce qui interrompt la nav, et les 3 cas d&apos;erreur. Avec le pattern de loader qui ne te lâche jamais.</description>
      <pubDate>Tue, 16 Jun 2026 00:00:00 GMT</pubDate>
      <guid>https://www.easyangularkit.com/blog/angular-router-events-navigation-cycle</guid>
    </item>
    <item>
      <title>@for et track : 5 erreurs qui rebuild ton DOM à chaque tick</title>
      <link>https://www.easyangularkit.com/blog/angular-for-track-erreurs-rebuild-dom</link>
      <description>Le track de @for n&apos;est pas un détail cosmétique : c&apos;est ce qui décide si Angular réutilise tes lignes ou les recrée toutes à chaque changement. 5 erreurs classiques qui transforment une liste fluide en diaporama, avec le before/after qui te rend les 60 FPS.</description>
      <pubDate>Fri, 12 Jun 2026 00:00:00 GMT</pubDate>
      <guid>https://www.easyangularkit.com/blog/angular-for-track-erreurs-rebuild-dom</guid>
    </item>
    <item>
      <title>Angular 19+ : `provideAppInitializer` enterre `APP_INITIALIZER` (et te fait gagner 70% de boilerplate)</title>
      <link>https://www.easyangularkit.com/blog/angular-provide-app-initializer-19-migration</link>
      <description>Angular 19 a introduit provideAppInitializer et marqué le vieux token APP_INITIALIZER deprecated. Plus de useFactory, plus de deps array typé any, plus de double lambda : un callback qui tourne en contexte d&apos;injection, avec inject() qui marche directement. Migration complète en 4 minutes, avec les pièges qui restent.</description>
      <pubDate>Wed, 10 Jun 2026 00:00:00 GMT</pubDate>
      <guid>https://www.easyangularkit.com/blog/angular-provide-app-initializer-19-migration</guid>
    </item>
    <item>
      <title>Formulaire de création et d&apos;édition : un composant ou deux ?</title>
      <link>https://www.easyangularkit.com/blog/angular-formulaire-creation-edition-un-ou-deux-composants</link>
      <description>Create et edit qui se ressemblent à 90 % : un seul composant avec un mode, ou deux ? La réponse avec Signal Forms (Angular 22), un critère de décision binaire et un pattern qui supprime les if(mode).</description>
      <pubDate>Sun, 07 Jun 2026 00:00:00 GMT</pubDate>
      <guid>https://www.easyangularkit.com/blog/angular-formulaire-creation-edition-un-ou-deux-composants</guid>
    </item>
    <item>
      <title>Guards, Resolvers, Interceptors Angular : 5 raisons d&apos;arrêter d&apos;écrire des classes</title>
      <link>https://www.easyangularkit.com/blog/angular-functional-guards-resolvers-interceptors</link>
      <description>Tes guards sont encore des @Injectable() avec un constructor de 4 paramètres ? Tes interceptors sont enregistrés via HTTP_INTERCEPTORS multi: true ? Tu écris du code Angular 14. Voici 5 raisons concrètes (bundle, tests, composition) de passer en fonctionnel, avec le before/after qui va bien.</description>
      <pubDate>Fri, 05 Jun 2026 00:00:00 GMT</pubDate>
      <guid>https://www.easyangularkit.com/blog/angular-functional-guards-resolvers-interceptors</guid>
    </item>
    <item>
      <title>@let dans les templates Angular : 5 patterns pour virer tes computed() de présentation</title>
      <link>https://www.easyangularkit.com/blog/angular-let-templates-virer-computed-presentation</link>
      <description>Tu colles un computed() à chaque fois que t&apos;as besoin d&apos;une expression dérivée dans ton template. Sauf que 80% du temps, c&apos;est juste de l&apos;affichage qui n&apos;a rien à faire dans le TypeScript. @let, stable depuis Angular 19, fait le boulot dans le template avec un type narrowing propre et zéro boilerplate. 5 patterns concrets pour nettoyer ton code.</description>
      <pubDate>Fri, 05 Jun 2026 00:00:00 GMT</pubDate>
      <guid>https://www.easyangularkit.com/blog/angular-let-templates-virer-computed-presentation</guid>
    </item>
    <item>
      <title>@Service : le décorateur qui remplace @Injectable (et quand il ne faut pas l&apos;utiliser)</title>
      <link>https://www.easyangularkit.com/blog/angular-service-decorator-vs-injectable</link>
      <description>Angular 22 introduit @Service, un décorateur plus ergonomique que @Injectable pour 90% de tes services. Singleton root par défaut, inject() obligatoire, scoping via autoProvided. On compare les deux ligne par ligne, et on voit les cas où @Injectable reste indispensable.</description>
      <pubDate>Fri, 05 Jun 2026 00:00:00 GMT</pubDate>
      <guid>https://www.easyangularkit.com/blog/angular-service-decorator-vs-injectable</guid>
    </item>
    <item>
      <title>knip sur Angular + Nx : traquer le code mort sans crouler sous les faux positifs</title>
      <link>https://www.easyangularkit.com/blog/knip-angular-nx-ssr-code-mort-faux-positifs</link>
      <description>knip détecte fichiers, dépendances et exports morts en un seul outil. Mais sur un projet Angular SSR + Nx, le run brut flag tes entrypoints serveur et ton tooling. Voici la config qui sépare le signal du bruit, tirée d&apos;un cas réel.</description>
      <pubDate>Fri, 05 Jun 2026 00:00:00 GMT</pubDate>
      <guid>https://www.easyangularkit.com/blog/knip-angular-nx-ssr-code-mort-faux-positifs</guid>
    </item>
    <item>
      <title>Angular 22 : le guide complet de la release signal-first</title>
      <link>https://www.easyangularkit.com/blog/angular-22-nouveautes</link>
      <description>Angular 22 est sorti et signe la fin des expérimentations : OnPush par défaut, Signal Forms stables, FetchBackend par défaut, décorateur @Service, injectAsync, outils MCP, et un gros ménage d&apos;APIs legacy. On passe tout en revue, avec du code.</description>
      <pubDate>Wed, 03 Jun 2026 00:00:00 GMT</pubDate>
      <guid>https://www.easyangularkit.com/blog/angular-22-nouveautes</guid>
    </item>
    <item>
      <title>NG0203 : inject() hors contexte d&apos;injection, le piège silencieux qui crashe en prod</title>
      <link>https://www.easyangularkit.com/blog/angular-ng0203-inject-injection-context</link>
      <description>NG0203 te tombe dessus dès que tu déplaces un inject() dans un setTimeout, un Observable ou après un await. L&apos;erreur n&apos;apparaît pas toujours en dev, parfois seulement en SSR ou en prod. Tour des 4 scénarios qui déclenchent l&apos;erreur et des bonnes manières de la corriger sans casser ton architecture.</description>
      <pubDate>Tue, 02 Jun 2026 00:00:00 GMT</pubDate>
      <guid>https://www.easyangularkit.com/blog/angular-ng0203-inject-injection-context</guid>
    </item>
    <item>
      <title>NgOptimizedImage : 5 erreurs qui plombent ton LCP (et ton score Lighthouse)</title>
      <link>https://www.easyangularkit.com/blog/angular-ngoptimizedimage-lcp-erreurs</link>
      <description>Tes images sont presque toujours l&apos;élément LCP de ta page, et c&apos;est souvent elles qui font chuter ton score Lighthouse. NgOptimizedImage corrige le CLS, le lazy-loading mal placé et les images servies en 2000px sur mobile, à condition de ne pas tomber dans les 5 pièges classiques. Guide pratique avec before/after.</description>
      <pubDate>Wed, 27 May 2026 00:00:00 GMT</pubDate>
      <guid>https://www.easyangularkit.com/blog/angular-ngoptimizedimage-lcp-erreurs</guid>
    </item>
    <item>
      <title>model() : supprime 60% du boilerplate de tes two-way bindings Angular</title>
      <link>https://www.easyangularkit.com/blog/angular-model-two-way-binding-signal</link>
      <description>Tu écris encore input() value + output() valueChange + un emit() manuel pour un simple [(banana)] ? model() fusionne les deux signaux en un seul, reste writable des deux côtés et s&apos;intègre nativement aux signals. Guide complet : forme courte, required, validations, pièges de boucle et quand NE PAS l&apos;utiliser.</description>
      <pubDate>Fri, 22 May 2026 00:00:00 GMT</pubDate>
      <guid>https://www.easyangularkit.com/blog/angular-model-two-way-binding-signal</guid>
    </item>
    <item>
      <title>afterNextRender() et afterRender() : remplace tes setTimeout(0) et tes ngAfterViewInit qui plantent en zoneless</title>
      <link>https://www.easyangularkit.com/blog/angular-afterrender-afternextrender</link>
      <description>ngAfterViewInit lit le DOM trop tôt. setTimeout(0) est un hack. Et en zoneless, les deux explosent. Angular 16 a introduit afterNextRender() et afterRender() pour synchroniser proprement le code avec le rendu : guide complet avec phases, SSR et pièges.</description>
      <pubDate>Wed, 20 May 2026 00:00:00 GMT</pubDate>
      <guid>https://www.easyangularkit.com/blog/angular-afterrender-afternextrender</guid>
    </item>
    <item>
      <title>`hostDirectives` : partage des comportements entre composants sans copier-coller une seule ligne</title>
      <link>https://www.easyangularkit.com/blog/angular-host-directives-composition</link>
      <description>La Directive Composition API d&apos;Angular 15+ te permet d&apos;attacher des directives directement sur l&apos;élément host d&apos;un composant, sans héritage, sans mixin, sans duplication. Un pattern que la majorité des équipes ignore encore.</description>
      <pubDate>Sun, 17 May 2026 00:00:00 GMT</pubDate>
      <guid>https://www.easyangularkit.com/blog/angular-host-directives-composition</guid>
    </item>
    <item>
      <title>:host display: contents en Angular : astuce ou code smell ?</title>
      <link>https://www.easyangularkit.com/blog/angular-host-display-contents</link>
      <description>L&apos;astuce CSS :host { display: contents } en Angular : pourquoi c&apos;est tentant, pourquoi c&apos;est souvent un wrapper qui s&apos;ignore, et quand c&apos;est légitime.</description>
      <pubDate>Fri, 15 May 2026 00:00:00 GMT</pubDate>
      <guid>https://www.easyangularkit.com/blog/angular-host-display-contents</guid>
    </item>
    <item>
      <title>Angular 19 — FormValueControl en 5 minutes</title>
      <link>https://www.easyangularkit.com/blog/angular-form-value-control-signal</link>
      <description>Angular 19 remplace ControlValueAccessor par FormValueControl : zéro provider, zéro callback, un simple model(). Guide de migration avant/après.</description>
      <pubDate>Wed, 13 May 2026 00:00:00 GMT</pubDate>
      <guid>https://www.easyangularkit.com/blog/angular-form-value-control-signal</guid>
    </item>
    <item>
      <title>linkedSignal() : le signal writable qui élimine tes anti-patterns effect()</title>
      <link>https://www.easyangularkit.com/blog/angular-linked-signal-guide-complet</link>
      <description>linkedSignal() est le chaînon manquant entre computed() (trop rigide) et effect() (trop dangereux pour synchroniser de l&apos;état). Guide complet avec forme courte, forme longue, use cases pagination et sélection intelligente.</description>
      <pubDate>Wed, 13 May 2026 00:00:00 GMT</pubDate>
      <guid>https://www.easyangularkit.com/blog/angular-linked-signal-guide-complet</guid>
    </item>
    <item>
      <title>`takeUntilDestroyed` : arrête de gérer tes subscriptions à la main</title>
      <link>https://www.easyangularkit.com/blog/angular-takeuntildestroyed-destroyref</link>
      <description>Le pattern Subject + takeUntil + ngOnDestroy est verbeux, fragile et franchement dépassé. Angular 16 a introduit takeUntilDestroyed() et DestroyRef — voici comment les utiliser correctement, y compris hors contexte d&apos;injection.</description>
      <pubDate>Sat, 09 May 2026 00:00:00 GMT</pubDate>
      <guid>https://www.easyangularkit.com/blog/angular-takeuntildestroyed-destroyref</guid>
    </item>
    <item>
      <title>Angular effect() : les 5 pièges qui attendent tout le monde (et comment les éviter)</title>
      <link>https://www.easyangularkit.com/blog/angular-effect-pieges</link>
      <description>effect() paraît simple — une fonction qui réagit aux signals. En pratique, elle concentre les erreurs les plus vicieuses : boucles infinies, memory leaks, timing surprenant. Voici les 5 pièges à éviter absolument.</description>
      <pubDate>Mon, 04 May 2026 00:00:00 GMT</pubDate>
      <guid>https://www.easyangularkit.com/blog/angular-effect-pieges</guid>
    </item>
    <item>
      <title>J&apos;ai refondu la landing EasyAngularKit avec impeccable, voici ce que ça donne</title>
      <link>https://www.easyangularkit.com/blog/refonte-landing-easyangularkit-impeccable</link>
      <description>Retour d&apos;expérience sur l&apos;utilisation de la skill open-source impeccable pour auditer et refondre la landing page EAK : du score 10/20 au score 19/20 en 28 commits, avec les commandes, les chiffres et les pièges rencontrés.</description>
      <pubDate>Wed, 29 Apr 2026 00:00:00 GMT</pubDate>
      <guid>https://www.easyangularkit.com/blog/refonte-landing-easyangularkit-impeccable</guid>
    </item>
    <item>
      <title>Tu utilises encore @ViewChild ? Voici le piège SSR qu&apos;il te cache</title>
      <link>https://www.easyangularkit.com/blog/angular-signal-queries-viewchild-contentchild</link>
      <description>viewChild(), viewChildren(), contentChild() remplacent les décorateurs @ViewChild et @ContentChild en Angular 17+. Plus réactifs, compatibles signals, et sans le piège de timing SSR. Guide complet avec avant/après.</description>
      <pubDate>Fri, 24 Apr 2026 00:00:00 GMT</pubDate>
      <guid>https://www.easyangularkit.com/blog/angular-signal-queries-viewchild-contentchild</guid>
    </item>
    <item>
      <title>@defer : le lazy loading de composants que tu ignores (et qui peut transformer tes Core Web Vitals)</title>
      <link>https://www.easyangularkit.com/blog/angular-defer-lazy-loading-composants</link>
      <description>Angular 17 a introduit @defer pour charger les composants à la demande, sans toucher au routing. Viewport, interaction, idle, prefetch — voici comment l&apos;utiliser pour vraiment alléger ton bundle initial.</description>
      <pubDate>Fri, 17 Apr 2026 00:00:00 GMT</pubDate>
      <guid>https://www.easyangularkit.com/blog/angular-defer-lazy-loading-composants</guid>
    </item>
    <item>
      <title>i18n en Angular : @angular/localize, ngx-translate ou Transloco ?</title>
      <link>https://www.easyangularkit.com/blog/i18n-angular-localize-ngx-translate-transloco</link>
      <description>Comparatif détaillé des trois solutions d&apos;internationalisation Angular — compile-time vs runtime, lazy loading, SSR, API Signals — pour choisir celle qui correspond à ton contexte.</description>
      <pubDate>Thu, 16 Apr 2026 00:00:00 GMT</pubDate>
      <guid>https://www.easyangularkit.com/blog/i18n-angular-localize-ngx-translate-transloco</guid>
    </item>
    <item>
      <title>Git Worktree : travaillez sur plusieurs branches en même temps</title>
      <link>https://www.easyangularkit.com/blog/git-worktree-branches-paralleles</link>
      <description>Découvrez git worktree, la fonctionnalité Git méconnue qui permet de travailler sur plusieurs branches simultanément sans stash ni clone — cas d&apos;usage concrets, commandes essentielles et retour d&apos;expérience avec Claude Code.</description>
      <pubDate>Tue, 14 Apr 2026 00:00:00 GMT</pubDate>
      <guid>https://www.easyangularkit.com/blog/git-worktree-branches-paralleles</guid>
    </item>
    <item>
      <title>Ajouter un flux RSS à ton blog Angular en mode SSG</title>
      <link>https://www.easyangularkit.com/blog/rss-feed-angular-ssg</link>
      <description>Comment générer un flux RSS 2.0 statique à partir d&apos;articles markdown sur un blog Angular SSG — script TypeScript, intégration au build, pièges à éviter.</description>
      <pubDate>Tue, 14 Apr 2026 00:00:00 GMT</pubDate>
      <guid>https://www.easyangularkit.com/blog/rss-feed-angular-ssg</guid>
    </item>
    <item>
      <title>Angular Signals — Cheatsheet complet</title>
      <link>https://www.easyangularkit.com/blog/angular-signals-cheatsheet</link>
      <description>Toutes les APIs Signals d&apos;Angular (17+ à 21+) dans une fiche mémo : signal, computed, effect, input, output, model, linkedSignal, resource, httpResource, rxResource, interop RxJS et patterns avancés.</description>
      <pubDate>Wed, 08 Apr 2026 00:00:00 GMT</pubDate>
      <guid>https://www.easyangularkit.com/blog/angular-signals-cheatsheet</guid>
    </item>
    <item>
      <title>Les templates Angular ont changé plus vite que tes habitudes — v17 à v21.2</title>
      <link>https://www.easyangularkit.com/blog/evolution-templates-angular-v17-v21</link>
      <description>Récapitulatif complet des évolutions du moteur de template Angular : control flow, @let, template literals, spread operator, arrow functions et plus encore, de la v17 à la v21.2.</description>
      <pubDate>Tue, 10 Mar 2026 00:00:00 GMT</pubDate>
      <guid>https://www.easyangularkit.com/blog/evolution-templates-angular-v17-v21</guid>
    </item>
    <item>
      <title>Angular 21.2 : le changelog commenté — tout ce qui change pour toi</title>
      <link>https://www.easyangularkit.com/blog/angular-21-2-nouveautes</link>
      <description>Angular 21.2 est une minor release anormalement dense : TypeScript 6, Signal Forms matures, @switch exhaustifs, instanceof dans les templates, arrow functions et resource snapshots.</description>
      <pubDate>Thu, 26 Feb 2026 00:00:00 GMT</pubDate>
      <guid>https://www.easyangularkit.com/blog/angular-21-2-nouveautes</guid>
    </item>
    <item>
      <title>httpResource est-il un anti-pattern ? Clean architecture et pragmatisme en Angular</title>
      <link>https://www.easyangularkit.com/blog/httpresource-anti-pattern-clean-architecture</link>
      <description>Angular 19.2 a introduit httpResource, une API déclarative pour charger des données HTTP via les signals. Simple, élégante… mais qui fait grincer des dents les puristes de la clean architecture. Faut-il l&apos;adopter ou la fuir ?</description>
      <pubDate>Wed, 04 Feb 2026 00:00:00 GMT</pubDate>
      <guid>https://www.easyangularkit.com/blog/httpresource-anti-pattern-clean-architecture</guid>
    </item>
    <item>
      <title>InjectionToken tree-shakable : arrête de polluer ton bundle</title>
      <link>https://www.easyangularkit.com/blog/injection-token-tree-shakable</link>
      <description>Découvre comment rendre tes InjectionToken Angular tree-shakable avec providedIn et factory. Moins de boilerplate, bundle plus léger, code plus propre.</description>
      <pubDate>Sun, 18 Jan 2026 00:00:00 GMT</pubDate>
      <guid>https://www.easyangularkit.com/blog/injection-token-tree-shakable</guid>
    </item>
    <item>
      <title>Angular 21.1 — Ce qui change vraiment pour ton code</title>
      <link>https://www.easyangularkit.com/blog/angular-21-1-nouveautes</link>
      <description>Angular 21.1 apporte des changements pratiques au quotidien : @switch fall-through, spread syntax dans les templates, évolutions de Signal Forms et nouvelle fonction isActive() standalone pour le router.</description>
      <pubDate>Thu, 15 Jan 2026 00:00:00 GMT</pubDate>
      <guid>https://www.easyangularkit.com/blog/angular-21-1-nouveautes</guid>
    </item>
    <item>
      <title>TypeScript : Arrête d&apos;utiliser any (et fais ça à la place)</title>
      <link>https://www.easyangularkit.com/blog/typescript-any-unknown-zod</link>
      <description>Utiliser any en TypeScript, c&apos;est comme conduire sans ceinture. Découvre comment unknown, les type guards et Zod peuvent sauver ton code (et ta carrière).</description>
      <pubDate>Tue, 06 Jan 2026 00:00:00 GMT</pubDate>
      <guid>https://www.easyangularkit.com/blog/typescript-any-unknown-zod</guid>
    </item>
    <item>
      <title>type vs interface en TypeScript : il est temps de trancher</title>
      <link>https://www.easyangularkit.com/blog/typescript-type-vs-interface</link>
      <description>Faut-il utiliser type ou interface en TypeScript ? Guide complet avec exemples pratiques, différences techniques et recommandations ESLint pour faire le bon choix.</description>
      <pubDate>Sat, 13 Dec 2025 00:00:00 GMT</pubDate>
      <guid>https://www.easyangularkit.com/blog/typescript-type-vs-interface</guid>
    </item>
    <item>
      <title>Comment j&apos;ai réduit de 25% la taille de mon bundle Angular</title>
      <link>https://www.easyangularkit.com/blog/optimisation-bundle-zod-mini</link>
      <description>Découvre comment j&apos;ai fait passer mon bundle Angular de plus d&apos;1 MB à 750 KB en remplaçant Zod par Zod Mini. Guide complet avec visualisation du bundle et astuces d&apos;optimisation.</description>
      <pubDate>Wed, 10 Dec 2025 00:00:00 GMT</pubDate>
      <guid>https://www.easyangularkit.com/blog/optimisation-bundle-zod-mini</guid>
    </item>
    <item>
      <title>Angular 21 : les nouveautés visibles dès la création d’un projet</title>
      <link>https://www.easyangularkit.com/blog/angular-21-nouveautes</link>
      <description>Angular 21 apporte plusieurs changements majeurs dès le simple `ng new` : Tailwind intégré, Vitest par défaut, zoneless, simplification HTTP et évolution du linter. Voici ce qui change concrètement.</description>
      <pubDate>Sat, 06 Dec 2025 00:00:00 GMT</pubDate>
      <guid>https://www.easyangularkit.com/blog/angular-21-nouveautes</guid>
    </item>
    <item>
      <title>Tester ses composants Angular avec inputBinding / outputBinding</title>
      <link>https://www.easyangularkit.com/blog/testing-input-binding-output-binding</link>
      <description>Modernise tes tests Angular avec inputBinding et outputBinding : moins de fixture.detectChanges(), plus de signaux et des specs plus déclaratives.</description>
      <pubDate>Thu, 27 Nov 2025 00:00:00 GMT</pubDate>
      <guid>https://www.easyangularkit.com/blog/testing-input-binding-output-binding</guid>
    </item>
    <item>
      <title>ControlValueAccessor : Crée Tes Propres Inputs Comme Un Pro</title>
      <link>https://www.easyangularkit.com/blog/controlvalueaccessor-cree-tes-inputs-custom-angular</link>
      <description>Guide complet pour créer des composants Angular personnalisés qui fonctionnent avec ngModel et FormControl. Apprenez ControlValueAccessor pas à pas avec des exemples pratiques.</description>
      <pubDate>Mon, 10 Nov 2025 00:00:00 GMT</pubDate>
      <guid>https://www.easyangularkit.com/blog/controlvalueaccessor-cree-tes-inputs-custom-angular</guid>
    </item>
    <item>
      <title>Comment J&apos;ai Saboté Mon Scroll Pendant 2 Heures (Et Ce Que J&apos;ai Appris)</title>
      <link>https://www.easyangularkit.com/blog/comment-jai-sabote-mon-scroll-pendant-2-heures</link>
      <description>Histoire d&apos;un bug de scroll Angular causé par un simple overflow-y: auto. Comment j&apos;ai passé 2 heures à chercher un problème que j&apos;avais créé moi-même.</description>
      <pubDate>Mon, 03 Nov 2025 00:00:00 GMT</pubDate>
      <guid>https://www.easyangularkit.com/blog/comment-jai-sabote-mon-scroll-pendant-2-heures</guid>
    </item>
    <item>
      <title>input(), @Attribute(), ou InjectionToken ? Le Guide Pour Choisir La Bonne Approche</title>
      <link>https://www.easyangularkit.com/blog/angular-input-attribute-injection-token-guide-complet</link>
      <description>Découvre quand utiliser input(), @Attribute() ou InjectionToken dans tes composants Angular. Guide complet avec exemples pratiques, comparaisons et patterns recommandés.</description>
      <pubDate>Mon, 27 Oct 2025 00:00:00 GMT</pubDate>
      <guid>https://www.easyangularkit.com/blog/angular-input-attribute-injection-token-guide-complet</guid>
    </item>
    <item>
      <title>Angular : le piège du double subscribe (et les 5 alternatives modernes)</title>
      <link>https://www.easyangularkit.com/blog/angular-double-subscribe</link>
      <description>Du double subscribe au rxResource : découvre comment moderniser ton data flow Angular pas à pas, de RxJS à Signals.</description>
      <pubDate>Sat, 25 Oct 2025 00:00:00 GMT</pubDate>
      <guid>https://www.easyangularkit.com/blog/angular-double-subscribe</guid>
    </item>
    <item>
      <title>Angular : Supprime Les Div Inutiles, Utilise Le Host Élément</title>
      <link>https://www.easyangularkit.com/blog/angular-host-element-supprime-div-inutiles</link>
      <description>Découvre comment éliminer les div wrappers inutiles dans tes composants Angular et utiliser l&apos;élément host pour un DOM plus propre et performant. Guide complet avec exemples pratiques.</description>
      <pubDate>Mon, 20 Oct 2025 00:00:00 GMT</pubDate>
      <guid>https://www.easyangularkit.com/blog/angular-host-element-supprime-div-inutiles</guid>
    </item>
    <item>
      <title>?? vs || : L&apos;Opérateur Que 90% Des Devs Utilisent Mal</title>
      <link>https://www.easyangularkit.com/blog/typescript-logical-or-and-nullish-coalescing</link>
      <description>Découvre la différence cruciale entre les opérateurs ?? et || en TypeScript et pourquoi l&apos;opérateur nullish coalescing devrait devenir ton nouveau réflexe pour éviter les bugs subtils.</description>
      <pubDate>Mon, 13 Oct 2025 00:00:00 GMT</pubDate>
      <guid>https://www.easyangularkit.com/blog/typescript-logical-or-and-nullish-coalescing</guid>
    </item>
    <item>
      <title>Erreur NG0401 après mise à jour Angular 20.2.4 → 20.3.3 (SSR) : cause, explication et correctif</title>
      <link>https://www.easyangularkit.com/blog/article-ng0401-angular-20.3-ssr</link>
      <description>Pourquoi votre build casse en Angular 20.3.x avec un NG0401 sur une app SSR, et comment corriger en passant à la nouvelle API de bootstrap côté serveur avec BootstrapContext.</description>
      <pubDate>Fri, 10 Oct 2025 00:00:00 GMT</pubDate>
      <guid>https://www.easyangularkit.com/blog/article-ng0401-angular-20.3-ssr</guid>
    </item>
    <item>
      <title>SOLID en Angular 20+ : le bon réflexe (avec contre‑exemples)</title>
      <link>https://www.easyangularkit.com/blog/solid-pattern-angular</link>
      <description>Chaque principe SOLID illustré en Angular moderne (Signals, control flow, InjectionToken) avec &apos;❌ mauvaise façon&apos; vs &apos;✅ bonne façon&apos; pour guider ta refacto.</description>
      <pubDate>Mon, 22 Sep 2025 00:00:00 GMT</pubDate>
      <guid>https://www.easyangularkit.com/blog/solid-pattern-angular</guid>
    </item>
    <item>
      <title>Ports &amp; Adapters en Angular (débutant) — un même composant, 2 backends (HTTP &amp; InMemory)</title>
      <link>https://www.easyangularkit.com/blog/ports-adapters-angular</link>
      <description>Apprends étape par étape à brancher un composant Angular sur un Port avec deux Adapters interchangeables : HTTP réel et InMemory pour la démo/tests. Compatible Angular v19+, Signals et nouveau control flow.</description>
      <pubDate>Fri, 19 Sep 2025 00:00:00 GMT</pubDate>
      <guid>https://www.easyangularkit.com/blog/ports-adapters-angular</guid>
    </item>
    <item>
      <title>Nx + Angular + Rspack : l&apos;alliance qui accélère tes builds</title>
      <link>https://www.easyangularkit.com/blog/nx-angular-rspack</link>
      <description>Découvre comment Nx et Rspack transforment l&apos;expérience Angular : monorepo structuré, bundling ultra-rapide et DX améliorée. Comparaison avec Webpack et Vite, exemples pratiques et cas d&apos;usage réels.</description>
      <pubDate>Thu, 11 Sep 2025 00:00:00 GMT</pubDate>
      <guid>https://www.easyangularkit.com/blog/nx-angular-rspack</guid>
    </item>
    <item>
      <title>📦 Installer et utiliser Zod en TypeScript</title>
      <link>https://www.easyangularkit.com/blog/zod-angular-v20</link>
      <description>Apprends à installer et utiliser Zod pour sécuriser tes données en TypeScript et Angular : validation runtime, parse vs safeParse, cas d’usage concrets avec API, formulaires et transformations.</description>
      <pubDate>Mon, 08 Sep 2025 00:00:00 GMT</pubDate>
      <guid>https://www.easyangularkit.com/blog/zod-angular-v20</guid>
    </item>
    <item>
      <title>Mocker une API REST dans Angular avec JSON Server : tuto complet</title>
      <link>https://www.easyangularkit.com/blog/angular-json-server-mock-api</link>
      <description>Tuto pas-à-pas pour simuler un backend REST en local avec json-server, lancer Angular et l&apos;API en parallèle, gérer les CORS, simuler des erreurs et choisir entre json-server, MSW et Mirage.js.</description>
      <pubDate>Fri, 29 Aug 2025 00:00:00 GMT</pubDate>
      <guid>https://www.easyangularkit.com/blog/angular-json-server-mock-api</guid>
    </item>
    <item>
      <title>Angular v20 — NG0201: No provider found for `MonServiceXXX`</title>
      <link>https://www.easyangularkit.com/blog/angular-ng0201-no-provider-found</link>
      <description>Pourquoi cette erreur survient dans Angular v20, comment la diagnostiquer et 3 façons propres de la corriger (providedIn, providers de route, provider global).</description>
      <pubDate>Mon, 25 Aug 2025 00:00:00 GMT</pubDate>
      <guid>https://www.easyangularkit.com/blog/angular-ng0201-no-provider-found</guid>
    </item>
    <item>
      <title>4 patterns de routing Angular pour des URLs propres et SEO-friendly</title>
      <link>https://www.easyangularkit.com/blog/angular-routing-patterns</link>
      <description>Routes dynamiques simples, segments hybrides statique+dynamique, UrlMatcher custom, data resolver : les 4 patterns de routing Angular que j&apos;utilise sur EasyAngularKit, avec leurs forces et leurs pièges côté SSR/SEO.</description>
      <pubDate>Fri, 22 Aug 2025 00:00:00 GMT</pubDate>
      <guid>https://www.easyangularkit.com/blog/angular-routing-patterns</guid>
    </item>
    <item>
      <title>Angular v20 : style guide et migration depuis v19, le guide complet</title>
      <link>https://www.easyangularkit.com/blog/angular-v20-guide-complet</link>
      <description>Le nouveau style guide Angular v20, et le retour d&apos;expérience d&apos;une migration v19 → v20 sur stack Nx + Vitest. Cohérence, organisation par feature, inject(), zoneless, pièges de tests : tout ce qu&apos;il faut savoir avant de migrer.</description>
      <pubDate>Fri, 15 Aug 2025 00:00:00 GMT</pubDate>
      <guid>https://www.easyangularkit.com/blog/angular-v20-guide-complet</guid>
    </item>
    <item>
      <title>EasyAngularKit explosé après l’upgrade Tailwind v4 ? Voici pourquoi… (et comment j’ai réparé)</title>
      <link>https://www.easyangularkit.com/blog/easyangularkit-tailwind-v4-migration</link>
      <description>Retour d&apos;expérience sur la migration vers Tailwind CSS v4 avec un projet Nx + Angular + Vitest. Symptômes, débug et fix.</description>
      <pubDate>Wed, 06 Aug 2025 00:00:00 GMT</pubDate>
      <guid>https://www.easyangularkit.com/blog/easyangularkit-tailwind-v4-migration</guid>
    </item>
    <item>
      <title>Angular : simplifie ta navigation avec routerLinkActive</title>
      <link>https://www.easyangularkit.com/blog/routerlinkactive-navigation-angular</link>
      <description>Évite le HTML répétitif en centralisant la config des liens de navigation dans ton TypeScript. Découvre comment utiliser routerLinkActive efficacement avec Angular v19+.</description>
      <pubDate>Wed, 06 Aug 2025 00:00:00 GMT</pubDate>
      <guid>https://www.easyangularkit.com/blog/routerlinkactive-navigation-angular</guid>
    </item>
    <item>
      <title>Angular : ajouter dynamiquement l&apos;en-tête Accept-Language avec un HttpInterceptor</title>
      <link>https://www.easyangularkit.com/blog/interceptor-accept-language</link>
      <description>Apprenez à utiliser les HttpInterceptors Angular pour centraliser l&apos;ajout de l&apos;en-tête Accept-Language à toutes vos requêtes HTTP, en fonction de la langue active de votre application.</description>
      <pubDate>Thu, 17 Jul 2025 00:00:00 GMT</pubDate>
      <guid>https://www.easyangularkit.com/blog/interceptor-accept-language</guid>
    </item>
    <item>
      <title>Transloco Angular : gérer le multilingue (i18n) en standalone</title>
      <link>https://www.easyangularkit.com/blog/angular-transloco-v20</link>
      <description>Transloco Angular : ajoute le multilingue (i18n) à un projet standalone moderne, avec une configuration clean et un exemple pas à pas.</description>
      <pubDate>Wed, 09 Jul 2025 00:00:00 GMT</pubDate>
      <guid>https://www.easyangularkit.com/blog/angular-transloco-v20</guid>
    </item>
    <item>
      <title>Angular : Smart vs Dumb Components</title>
      <link>https://www.easyangularkit.com/blog/article-smart-dumb-components</link>
      <description>Comprenez la différence entre composants intelligents et composants présentiels, et structurez vos applications Angular proprement.</description>
      <pubDate>Fri, 27 Jun 2025 00:00:00 GMT</pubDate>
      <guid>https://www.easyangularkit.com/blog/article-smart-dumb-components</guid>
    </item>
    <item>
      <title>Cheat Sheet RxJS &amp; Signal (Angular v17+)</title>
      <link>https://www.easyangularkit.com/blog/cheatsheet-rxjs-signal-angular</link>
      <description>Une fiche mémo des concepts et opérateurs clés RxJS et Signal à connaître pour vos projets Angular modernes.</description>
      <pubDate>Wed, 25 Jun 2025 00:00:00 GMT</pubDate>
      <guid>https://www.easyangularkit.com/blog/cheatsheet-rxjs-signal-angular</guid>
    </item>
    <item>
      <title>Faut-il un store dans votre projet Angular ?</title>
      <link>https://www.easyangularkit.com/blog/faut-il-un-store-angular</link>
      <description>Une grille de décision simple pour savoir si votre projet Angular a vraiment besoin d’un store comme NgRx ou Signal Store.</description>
      <pubDate>Wed, 25 Jun 2025 00:00:00 GMT</pubDate>
      <guid>https://www.easyangularkit.com/blog/faut-il-un-store-angular</guid>
    </item>
    <item>
      <title>Angular : Quelle différence entre Constructor et OnInit ?</title>
      <link>https://www.easyangularkit.com/blog/constructor-vs-oninit</link>
      <description>Faut-il utiliser le constructor ou ngOnInit dans un composant Angular ? Ce guide rapide clarifie leur rôle et t’aide à faire le bon choix.</description>
      <pubDate>Thu, 12 Jun 2025 00:00:00 GMT</pubDate>
      <guid>https://www.easyangularkit.com/blog/constructor-vs-oninit</guid>
    </item>
    <item>
      <title>Vitest Angular 20 : Guide complet d&apos;installation et configuration</title>
      <link>https://www.easyangularkit.com/blog/angular-v20-vitest-zoneless</link>
      <description>Guide complet pour installer et configurer Vitest avec Angular 20. Remplacez Karma/Jasmine par Vitest pour des tests plus rapides et modernes.</description>
      <pubDate>Fri, 06 Jun 2025 00:00:00 GMT</pubDate>
      <guid>https://www.easyangularkit.com/blog/angular-v20-vitest-zoneless</guid>
    </item>
    <item>
      <title>Découverte du Signal Store de NgRx : ce que j’en pense après l’avoir testé dans EasyAngularKit</title>
      <link>https://www.easyangularkit.com/blog/decouverte-signal-store-ngrx</link>
      <description>Un retour d&apos;expérience concret sur l&apos;utilisation du Signal Store de NgRx dans une reproduction simplifiée d&apos;EasyAngularKit.</description>
      <pubDate>Fri, 06 Jun 2025 00:00:00 GMT</pubDate>
      <guid>https://www.easyangularkit.com/blog/decouverte-signal-store-ngrx</guid>
    </item>
    <item>
      <title>Et si withComponentInputBinding était plus structurant qu’on ne le croit ?</title>
      <link>https://www.easyangularkit.com/blog/with-component-input-binding-structurant</link>
      <description>Depuis Angular v16, l’apparition de withComponentInputBinding transforme la façon dont les composants reçoivent les données des routes. Voici ce que ça change, ses avantages, ses limites… et un piège à connaître.</description>
      <pubDate>Tue, 27 May 2025 00:00:00 GMT</pubDate>
      <guid>https://www.easyangularkit.com/blog/with-component-input-binding-structurant</guid>
    </item>
    <item>
      <title>NgBaguette 2025 : ce que j’ai retenu de la 1ère édition</title>
      <link>https://www.easyangularkit.com/blog/ngbaguette-2025-retour</link>
      <description>Retour d’expérience sur la première édition de NgBaguette, l&apos;évènement Angular 100% francophone. Talks, rencontres et coups de cœur.</description>
      <pubDate>Sun, 25 May 2025 00:00:00 GMT</pubDate>
      <guid>https://www.easyangularkit.com/blog/ngbaguette-2025-retour</guid>
    </item>
    <item>
      <title>De Zone.js à Zoneless : le guide complet de migration Angular</title>
      <link>https://www.easyangularkit.com/blog/zoneless-migration-guide-angular</link>
      <description>Angular 21 active le mode zoneless par défaut. Ce guide couvre tout : contexte historique, concepts clés, stratégie de migration progressive en 4 phases, patterns courants et pièges à éviter.</description>
      <pubDate>Sat, 25 Jan 2025 00:00:00 GMT</pubDate>
      <guid>https://www.easyangularkit.com/blog/zoneless-migration-guide-angular</guid>
    </item>
  </channel>
</rss>
