<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>Angular20 auf cbrueggenolte.de</title>
    <link>https://cbrueggenolte.de/tags/angular20/</link>
    <description>Neueste Beiträge in Angular20 auf cbrueggenolte.de</description>
    <generator>Hugo -- gohugo.io</generator>
    <language>de-DE</language>
    <managingEditor>96ca5227@cbrueggenolte.de (cbrueggenolte.de)</managingEditor>
    <webMaster>96ca5227@cbrueggenolte.de (cbrueggenolte.de)</webMaster>
    <copyright>2018-2026 cbrueggenolte</copyright>
    <lastBuildDate>Thu, 13 Nov 2025 00:00:00 +0100</lastBuildDate>
    <atom:link href="https://cbrueggenolte.de/tags/angular20/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Thoughts on Angular 20</title>
      <link>https://cbrueggenolte.de/thoughts-on-angular-20/</link>
      <pubDate>Thu, 13 Nov 2025 00:00:00 +0100</pubDate><author>96ca5227@cbrueggenolte.de (cbrueggenolte.de)</author>
      <guid>https://cbrueggenolte.de/thoughts-on-angular-20/</guid>
      <description>&lt;p&gt;Angular 20 ist nun schon eine Weile veröffentlicht,&#xA;und auch ich lerne weiterhin die neuen Features und Best Practices.&lt;/p&gt;&#xA;&lt;p&gt;Mit dem Release von Angular 20&#xA;haben die Entwickler weit mehr eingeführt&#xA;als das übliche Framework-Housekeeping.&#xA;Das Team treibt einen klaren Wandel voran:&#xA;hin zu saubereren Bezeichnungen,&#xA;domänenorientierten Strukturen&#xA;und einer insgesamt moderneren Projektorganisation.&lt;/p&gt;&#xA;&lt;p&gt;Das habe ich selbst erlebt:&#xA;Nachdem ich meine Tools auf Angular 20 aktualisiert&#xA;und ein neues Projekt mit der Angular CLI erstellt hatte,&#xA;fiel mir in VS Code etwas Merkwürdiges auf.&#xA;VS Code bot plötzlich keinerlei Autovervollständigung mehr&#xA;in meinen HTML-Templates für Properties und Methoden,&#xA;die ich in den zugehörigen TypeScript-Dateien definiert hatte.&#xA;Sogar der gewohnte „Go to Component“-Link war verschwunden.&#xA;Mit anderen Worten:&#xA;Der Editor verstand nicht mehr,&#xA;dass .html- und .ts-Dateien zusammengehörten —&#xA;einfach weil das neue Namensschema nicht erkannt wurde.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>Angular 20 ist nun schon eine Weile veröffentlicht,
und auch ich lerne weiterhin die neuen Features und Best Practices.</p>
<p>Mit dem Release von Angular 20
haben die Entwickler weit mehr eingeführt
als das übliche Framework-Housekeeping.
Das Team treibt einen klaren Wandel voran:
hin zu saubereren Bezeichnungen,
domänenorientierten Strukturen
und einer insgesamt moderneren Projektorganisation.</p>
<p>Das habe ich selbst erlebt:
Nachdem ich meine Tools auf Angular 20 aktualisiert
und ein neues Projekt mit der Angular CLI erstellt hatte,
fiel mir in VS Code etwas Merkwürdiges auf.
VS Code bot plötzlich keinerlei Autovervollständigung mehr
in meinen HTML-Templates für Properties und Methoden,
die ich in den zugehörigen TypeScript-Dateien definiert hatte.
Sogar der gewohnte „Go to Component“-Link war verschwunden.
Mit anderen Worten:
Der Editor verstand nicht mehr,
dass .html- und .ts-Dateien zusammengehörten —
einfach weil das neue Namensschema nicht erkannt wurde.</p>
<p>Die Ursache war banal:
Ich nutzte noch eine ältere Version der Angular Language Service Extension.
Wenn du mit VS Code arbeitest,
stelle sicher,
dass Angular Language Service 20.3.3 oder neuer installiert ist.
Diese Version unterstützt die neuen Angular-20-Namenskonventionen vollständig
und stellt IntelliSense sowie Navigation korrekt wieder her.</p>
<p>Ist das erledigt,
funktioniert die Autovervollständigung wieder einwandfrei,
und du kannst die neuen Angular-20-Konventionen konsequent nutzen.</p>
<h2 id="ein-klarerer-namensstil">Ein klarerer Namensstil</h2>
<p>Angular 20 ermutigt Entwickler,
sich vom alten Muster zu lösen,
bei dem der Dateityp im Dateinamen untergebracht wurde:</p>





<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-text" data-lang="text"><span class="line"><span class="ln">1</span><span class="cl">user-profile.component.ts
</span></span><span class="line"><span class="ln">2</span><span class="cl">auth.service.ts
</span></span><span class="line"><span class="ln">3</span><span class="cl">highlight.directive.ts</span></span></code></pre></div><p>Stattdessen liegt der Fokus nun auf aussagekräftigen,
domänenorientierten Namen:</p>





<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-text" data-lang="text"><span class="line"><span class="ln">1</span><span class="cl">user-profile.ts
</span></span><span class="line"><span class="ln">2</span><span class="cl">auth-store.ts
</span></span><span class="line"><span class="ln">3</span><span class="cl">auth-api.ts
</span></span><span class="line"><span class="ln">4</span><span class="cl">highlight.ts</span></span></code></pre></div><p>Einige Suffixe bleiben —
vor allem dann,
wenn sie tatsächliches Verhalten oder einen Vertrag beschreiben:</p>





<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-text" data-lang="text"><span class="line"><span class="ln">1</span><span class="cl">auth-guard.ts
</span></span><span class="line"><span class="ln">2</span><span class="cl">currency-pipe.ts
</span></span><span class="line"><span class="ln">3</span><span class="cl">shared-module.ts</span></span></code></pre></div><p>Die Idee ist einfach:
<strong>Benenne Dinge nach dem, was sie repräsentieren</strong> —
nicht nach dem Angular-Konstrukt,
das sich zufällig darin befindet.
Der Code wirkt dadurch leichter
und deutlich besser lesbar,
insbesondere bei größeren Projekten.</p>
<h2 id="eine-durchdachtere-ordnerstruktur">Eine durchdachtere Ordnerstruktur</h2>
<p>Angular 20 orientiert sich noch stärker
an einer domänengetriebenen Organisation.
Statt eines „features“-Ordners mit etwas von allem
strukturierst du deine App nach Kontexten.</p>
<p>Ein typisches Setup sieht heute so aus:</p>





<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-text" data-lang="text"><span class="line"><span class="ln">1</span><span class="cl">src/
</span></span><span class="line"><span class="ln">2</span><span class="cl">└── app/
</span></span><span class="line"><span class="ln">3</span><span class="cl">├── core/
</span></span><span class="line"><span class="ln">4</span><span class="cl">├── domains/
</span></span><span class="line"><span class="ln">5</span><span class="cl">└── shared/</span></span></code></pre></div><h3 id="core--globale-anwendungslogik"><code>core/</code> – Globale Anwendungslogik</h3>
<p>Alles in <code>core</code> gilt app-weit,
ist aber nicht fachlich spezifisch:
Authentifizierung,
Layout-Grundstruktur,
Fehlerbehandlung,
Konfiguration usw.</p>
<p>Beispiel:</p>





<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-text" data-lang="text"><span class="line"><span class="ln"> 1</span><span class="cl">core/
</span></span><span class="line"><span class="ln"> 2</span><span class="cl">auth/
</span></span><span class="line"><span class="ln"> 3</span><span class="cl">guards/
</span></span><span class="line"><span class="ln"> 4</span><span class="cl">auth-guard.ts
</span></span><span class="line"><span class="ln"> 5</span><span class="cl">stores/
</span></span><span class="line"><span class="ln"> 6</span><span class="cl">auth-store.ts
</span></span><span class="line"><span class="ln"> 7</span><span class="cl">pages/
</span></span><span class="line"><span class="ln"> 8</span><span class="cl">login/
</span></span><span class="line"><span class="ln"> 9</span><span class="cl">login.ts
</span></span><span class="line"><span class="ln">10</span><span class="cl">login.html
</span></span><span class="line"><span class="ln">11</span><span class="cl">login.css</span></span></code></pre></div><p>Geroutete Views liegen sauber in einem <code>pages/</code>-Verzeichnis,
damit Navigation klar und nachvollziehbar bleibt.</p>
<h3 id="domains--deine-eigentliche-fachlogik"><code>domains/</code> – Deine eigentliche Fachlogik</h3>
<p>Statt eines großen Sammelordners mit lose gruppierten „Features“
teilst du deine Anwendung in fachliche Bereiche:</p>





<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-text" data-lang="text"><span class="line"><span class="ln">1</span><span class="cl">domains/
</span></span><span class="line"><span class="ln">2</span><span class="cl">jobs/
</span></span><span class="line"><span class="ln">3</span><span class="cl">pages/
</span></span><span class="line"><span class="ln">4</span><span class="cl">models/
</span></span><span class="line"><span class="ln">5</span><span class="cl">stores/
</span></span><span class="line"><span class="ln">6</span><span class="cl">services/
</span></span><span class="line"><span class="ln">7</span><span class="cl">jobs.routes.ts
</span></span><span class="line"><span class="ln">8</span><span class="cl">events/
</span></span><span class="line"><span class="ln">9</span><span class="cl">groups/</span></span></code></pre></div><p>Diese Struktur skaliert deutlich besser.
Gerade für mich als jemand,
der Angular noch lernt,
macht sie den Zweck jedes Ordners wesentlich klarer.
Jede Domäne kann sich eigenständig weiterentwickeln,
und Teams können parallel arbeiten,
ohne sich gegenseitig in die Quere zu kommen.</p>
<h3 id="shared--wiederverwendbare-logikunabhängige-bausteine"><code>shared/</code> – Wiederverwendbare, logikunabhängige Bausteine</h3>
<p>Alles hier sollte möglichst „dumm“ und generisch sein:</p>





<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-text" data-lang="text"><span class="line"><span class="ln"> 1</span><span class="cl">shared/
</span></span><span class="line"><span class="ln"> 2</span><span class="cl">components/
</span></span><span class="line"><span class="ln"> 3</span><span class="cl">notification/
</span></span><span class="line"><span class="ln"> 4</span><span class="cl">notification.ts
</span></span><span class="line"><span class="ln"> 5</span><span class="cl">notification.html
</span></span><span class="line"><span class="ln"> 6</span><span class="cl">notification.css
</span></span><span class="line"><span class="ln"> 7</span><span class="cl">pipes/
</span></span><span class="line"><span class="ln"> 8</span><span class="cl">format-date-pipe.ts
</span></span><span class="line"><span class="ln"> 9</span><span class="cl">utils/
</span></span><span class="line"><span class="ln">10</span><span class="cl">string-utils.ts
</span></span><span class="line"><span class="ln">11</span><span class="cl">
</span></span><span class="line"><span class="ln">12</span><span class="cl">```text
</span></span><span class="line"><span class="ln">13</span><span class="cl">Eine `notification`-Komponente sollte zum Beispiel nicht wissen,
</span></span><span class="line"><span class="ln">14</span><span class="cl">ob sie eine Sicherheitswarnung
</span></span><span class="line"><span class="ln">15</span><span class="cl">oder eine Erfolgsmeldung
</span></span><span class="line"><span class="ln">16</span><span class="cl">aus einer völlig anderen Domäne anzeigt.
</span></span><span class="line"><span class="ln">17</span><span class="cl">
</span></span><span class="line"><span class="ln">18</span><span class="cl">## Standalone Components sind der Standard. Nutze das.
</span></span><span class="line"><span class="ln">19</span><span class="cl">
</span></span><span class="line"><span class="ln">20</span><span class="cl">Schon vor einiger Zeit eingeführt,
</span></span><span class="line"><span class="ln">21</span><span class="cl">aber weiterhin relevant:
</span></span><span class="line"><span class="ln">22</span><span class="cl">
</span></span><span class="line"><span class="ln">23</span><span class="cl">Seit Angular 17 sind Standalone Components der Standard,
</span></span><span class="line"><span class="ln">24</span><span class="cl">und Angular 20 setzt diesen Weg konsequent fort.
</span></span><span class="line"><span class="ln">25</span><span class="cl">Ein modernes Setup sieht typischerweise so aus:
</span></span><span class="line"><span class="ln">26</span><span class="cl">
</span></span><span class="line"><span class="ln">27</span><span class="cl">```text
</span></span><span class="line"><span class="ln">28</span><span class="cl">app/
</span></span><span class="line"><span class="ln">29</span><span class="cl">app.ts
</span></span><span class="line"><span class="ln">30</span><span class="cl">app.routes.ts
</span></span><span class="line"><span class="ln">31</span><span class="cl">app.config.ts</span></span></code></pre></div><p>Module sind nur noch nötig,
wenn ein spezieller Kompatibilitätsfall es erfordert.
Die meisten Projekte profitieren sofort davon,
Boilerplate zu reduzieren
und Standalone-Komposition vollständig zu nutzen.</p>
<h2 id="fazit">Fazit</h2>
<p>Angular 20 fühlt sich an wie ein bewusster Schritt
hin zu einer saubereren,
skalierbaren Architektur —
nicht durch starre Regeln,
sondern indem der moderne Ansatz zum natürlichen Standard wird.
Wenn deine Tools aktuell sind
(vor allem der Language Server),
verläuft der Umstieg reibungslos und intuitiv.</p>
<h3 id="ein-paar-zentrale-punkte">Ein paar zentrale Punkte</h3>
<ul>
<li>Nutze bewusst gewählte Dateinamen statt <code>.component.ts</code> oder <code>.service.ts</code>.</li>
<li>Strukturiere deine App nach <strong>Domänen</strong>, nicht nach Angular-Konstrukten.</li>
<li>Halte gemeinsame Bausteine bewusst „dumm“.</li>
<li>Setze auf Standalone Components — das Ökosystem ist bereit dafür.</li>
</ul>
<p>Es ist ein guter Zeitpunkt,
ein bestehendes Projekt noch einmal zu überprüfen,
veraltetes Naming-Chaos aufzuräumen
und eine klarere Struktur einzuführen,
die auch langfristig trägt.</p>
<p>Viel Freude beim Coden mit Angular 20!</p>
]]></content:encoded>
    </item>
  </channel>
</rss>
