{"id":2793,"date":"2024-04-11T09:01:11","date_gmt":"2024-04-11T07:01:11","guid":{"rendered":"https:\/\/www.thecodecampus.de\/blog\/?p=2793"},"modified":"2026-04-09T11:25:26","modified_gmt":"2026-04-09T09:25:26","slug":"wie-kombiniert-man-angular-signals-und-rxjs","status":"publish","type":"post","link":"https:\/\/www.thecodecampus.de\/blog\/wie-kombiniert-man-angular-signals-und-rxjs\/","title":{"rendered":"Angular Signals Teil 2 &#8211; Wie kombiniert man Angular Signals und RxJS"},"content":{"rendered":"<p><strong><em>Go <a href=\"https:\/\/www.thecodecampus.de\/blog\/how-to-combine-angular-signals-and-rxjs\/\">here<\/a> for the english version of this blog post.<\/em><\/strong><\/p>\n<h2>Angular 17: Signals + RxJS = Perfekte Erg\u00e4nzung<\/h2>\n<p>Im ersten Beitrag dieser Artikelserie, <a href=\"https:\/\/www.thecodecampus.de\/blog\/mit-angular-signals-effiziente-anwendungen-entwickeln\/\">Angular Signals Teil 1 &#8211; How-to Guide f\u00fcr Angular Signals<\/a>, haben wir zusammengefasst was Angular Signals sind und wie man sie verwendet. Jetzt wollen wir uns anschauen warum Signals kein Ersatz f\u00fcr RxJS sind und wie man beide Technologien am besten kombiniert.<\/p>\n<p><a href=\"https:\/\/www.thecodecampus.de\/blog\/wp-content\/uploads\/2024\/04\/Angular-Signals-Part-2.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1200\" height=\"1200\" class=\"aligncenter wp-image-2878\" style=\"width: 600px; height: auto;\" src=\"https:\/\/www.thecodecampus.de\/blog\/wp-content\/uploads\/2024\/04\/Angular-Signals-Part-2.png\" alt=\"Angular Signals Part 2\" srcset=\"https:\/\/www.thecodecampus.de\/blog\/wp-content\/uploads\/2024\/04\/Angular-Signals-Part-2.png 1200w, https:\/\/www.thecodecampus.de\/blog\/wp-content\/uploads\/2024\/04\/Angular-Signals-Part-2-300x300.png 300w, https:\/\/www.thecodecampus.de\/blog\/wp-content\/uploads\/2024\/04\/Angular-Signals-Part-2-1024x1024.png 1024w, https:\/\/www.thecodecampus.de\/blog\/wp-content\/uploads\/2024\/04\/Angular-Signals-Part-2-150x150.png 150w, https:\/\/www.thecodecampus.de\/blog\/wp-content\/uploads\/2024\/04\/Angular-Signals-Part-2-768x768.png 768w\" sizes=\"auto, (max-width: 1200px) 100vw, 1200px\" \/><\/a><\/p>\n<p>Wie bereits festgehalten, sind Signals besonders gut daf\u00fcr geeignet synchrone Zust\u00e4nde in der Anwendung zu verwalten. Damit \u00fcbernehmen sie aber eine Aufgabe die bisher von RxJS behandelt wurde. Die Frage ist also, ob Signals RxJS g\u00e4nzlich abl\u00f6sen werden?<\/p>\n<p>Die Antwort darauf ist: Nein.<\/p>\n<p>Um zu verstehen, warum RxJS mit der Verwendung von Signals nicht weniger wichtig wird, muss man die Anwendungszwecke der Technologien und ihre St\u00e4rken und Schw\u00e4chen kennen. Genau dies, werden wir in diesem Beitrag machen.<\/p>\n<p>Im Folgenden Blog erf\u00e4hrst Du wie Du Angular Signals und RxJS zusammen verwendest.<\/p>\n<h2>St\u00e4rken und Schw\u00e4chen der Technologien<\/h2>\n<p>Um die passende Technologie f\u00fcr den entsprechenden Anwendungszweck zu w\u00e4hlen, muss man \u00fcber ihre Vor- und Nachteile Bescheid wissen. Welche St\u00e4rken und Schw\u00e4chen Signals und RxJS haben schauen wir uns als n\u00e4chstes an.<\/p>\n<h3>RxJS<\/h3>\n<p>Der folgende Abschnitt ist nat\u00fcrlich keine vollst\u00e4ndige Analyse oder Einf\u00fchrung zu RxJS. Er soll nur einen \u00dcberblick geben, damit eine Einsch\u00e4tzung und Abgrenzung bez\u00fcglich Angular Signals gemacht werden kann. Wenn Du noch mehr \u00fcber RxJS wissen m\u00f6chtest kannst du <a href=\"https:\/\/rxjs.dev\/guide\/overview#introduction\">hier<\/a> einen Blick in ihre Dokumentation werfen.<\/p>\n<p>Es gibt zwei Aufgabenbereiche die RxJS abdeckt. Zum einen die Verwaltung und Koordination von asynchronen Events, zum anderen die reaktive Programmierung. Mit dem Observable-Pattern kann RxJS effizient asynchrone Events und Operationen, als Datenstr\u00f6me handhaben.<\/p>\n<p>Die Vielzahl von Operatoren, wie <code>map<\/code> oder <code>filter<\/code>, die zur Verarbeitung und Umwandlung der Observables zur Verf\u00fcgung stehen, ist eine gro\u00dfe St\u00e4rke von RxJS. Dadurch k\u00f6nnen komplexe Aufgaben, z.B. das Koordinieren von mehreren Ereignissen oder das Kombinieren von Datenstr\u00f6men, simpel und leserlich gel\u00f6st werden. Mit dem HTTP-Client bekommen wir in Angular einen Service zur Verf\u00fcgung gestellt, der uns direkt eine Arbeit mit Observables erm\u00f6glicht. Observables erm\u00f6glichen es uns die HTTP-Ereignisse, wie success, error und completion, zu behandeln und zu verarbeiten.<\/p>\n<p>RxJS war, mit Bibliotheken wie <a href=\"https:\/\/github.com\/w11k\/Tydux\">Tydux<\/a> oder <a href=\"https:\/\/ngrx.io\/docs\">NgRx<\/a>, das bisherige Go-To f\u00fcr globales State Management. An diesem Punkt k\u00f6nnen uns nun Signals das Leben deutlich erleichtern.<\/p>\n<h3>Angular Signals<\/h3>\n<p>Im Gegensatz zu RxJS haben Signals eine eingeschr\u00e4nkte Funktionalit\u00e4t, was das Reagieren auf Events angeht. Da man nur die <code>effect()<\/code> und <code>computed()<\/code> Funktionen nutzen kann, um auf \u00c4nderungen in anderen Signals zu reagieren, und nicht so viele und umfangreiche Operatoren zur Hand hat, k\u00f6nnen gerade komplexere Aufgaben zu viel und unleserlichem Code f\u00fchren. Signals haben beispielsweise keine klassischen und bekannten Operatoren wie <code>catchError<\/code> oder <code>switchMap<\/code>, die daf\u00fcr zust\u00e4ndig sind, Anfragen zu einem bestimmten Zeitpunkt abzubrechen, wenn eine neue Anfrage mit neuen Daten kommt.<\/p>\n<p>Signals zielen nicht darauf ab RxJS g\u00e4nzlich zu ersetzen, sondern die reaktive Programmierung zu vereinfachen.<br \/>\nEin gutes Beispiel sind die folgenden Code-Bl\u00f6cke, die beide die gleiche Funktionalit\u00e4t darstellen. Wenn sich die Variablen <code>firstName<\/code> oder <code>lastName<\/code> \u00e4ndern, soll die Variable <code>fullName<\/code> aktualisiert werden.<\/p>\n<p>Der erste Block zeigt wie RxJS diese Aufgabe mit dem <code>fullName$<\/code> Observable l\u00f6st. Wir erzeugen mit <code>combineLatest<\/code> ein neues Observable, dass unsere beiden Observable Quellen kombiniert. Dabei m\u00fcssen wir daran denken, dass <code>combineLatest<\/code> erst Werte produziert, wenn sowohl <code>firstName$<\/code> und <code>lastName$<\/code> mindestens einmal einen Wert geliefert haben. Zur Verwendung des eigentlichen Wertes von <code>fullName$<\/code> m\u00fcssen wir an dem Observable subscriben. Dann m\u00fcssen wir uns auch \u00fcber das Beenden der Subscription k\u00fcmmern.<\/p>\n<div>\n<pre class=\"lang:default decode:true\">public fullName: string | null = null\r\npublic fullName$ = combineLatest([this.firstName$, this.lastName$]).pipe(\r\n  map(([firstName, lastName]) =&gt;`${firstName} ${lastName}`),\r\n);\r\n\r\n\/\/ Verwendung mit Subscription und takeUntilDestroyed Operator\r\nfullName$\r\n  .pipe(takeUntilDestroyed())\r\n  .subscribe(fullName =&gt; this.fullName = fullName)<\/pre>\n<\/div>\n<p>Mit Signals, unter Verwendung der <code>computed()<\/code> Funktion, sieht das Ganze anders aus. Auf den Wert eines Signals greifen wir mit der Verwendung der runden Klammern zu. In der <code>computed()<\/code> Funktion werden die Abh\u00e4ngigkeiten an den Inhalt der Signals <code>firstName<\/code> und <code>lastName<\/code> automatisch erfasst, nur dadurch, dass wir deren Inhalte verwendet haben. Auch m\u00fcssen wir keine Subscription mehr verwalten. Und zu guter Letzt haben Signals immer einen initialen Wert bei ihrer Erzeugung.<\/p>\n<div>\n<pre class=\"lang:default decode:true\">fullName = computed(() =&gt; {\r\n  return`${this.firstName()} ${this.lastName()}`;\r\n});\r\n\r\n\/\/ Verwendung mit ()\r\nfullName()<\/pre>\n<\/div>\n<p>RxJS ist ein leistungsf\u00e4higes und vielseitiges Werkzeug, mit vielen m\u00e4chtigen Operatoren. Uns muss das Verhalten der einzelnen Operatoren klar sein, um sicher mit RxJS arbeiten zu k\u00f6nnen. Zus\u00e4tzlich m\u00fcssen wir uns um das Erzeugen und Kombinieren von Observables und deren Subscriptions k\u00fcmmern. Signals auf der anderen Seite sind simpler in der Verwendung. Wir brauchen keine Subscriptions und Abh\u00e4ngigkeiten zu managen. Die Ausf\u00fchrung von Signals ist allerdings synchron und kann daher nur die synchronen Teile von RxJs ersetzen und dabei das Programmieren und das State Management vereinfachen.<\/p>\n<p><a style=\"display: inline-block;\" href=\"https:\/\/www.thecodecampus.de\/schulungen\/angular\">\n<picture><source srcset=\"https:\/\/www.thecodecampus.de\/blog\/wp-content\/uploads\/2025\/04\/angular-schulungen_anne_WP_big.png\" media=\"(min-width: 1024px)\" \/><\/picture>\n<picture><source srcset=\"https:\/\/www.thecodecampus.de\/blog\/wp-content\/uploads\/2025\/04\/angular-schulungen_anne_WP_medium.png\" media=\"(min-width: 600px)\" \/><\/picture>\n<picture><img decoding=\"async\" class=\"alignnone size-full wp-image-38\" src=\"https:\/\/www.thecodecampus.de\/blog\/wp-content\/uploads\/2025\/04\/angular-schulungen_anne_WP_small.png\" alt=\"Angular Schulungen\" \/><\/picture>\n<\/a><\/p>\n<h2>Wie kombiniert man die beiden Ans\u00e4tze?<\/h2>\n<p>Da wir nun festgehalten haben, dass RxJS weiterhin wichtig und relevant ist, bleibt die Frage wie man die beiden Technologien zusammen verwendet. Im Prinzip genau so wie wir es oben festgehalten haben. F\u00fcr synchrone Vorg\u00e4nge, wie das State Management, verwendet man Signals und alle asynchronen Operationen, wie Events und Anfragen an die Datenbank, sollten mit RxJS behandelt werden.<\/p>\n<p>Es gibt zwei Funktionen, die daf\u00fcr sorgen, dass genau dieses Zusammenspiel reibungslos funktioniert.<\/p>\n<h3>toSignal()<\/h3>\n<p>Mit der <code>toSignal()<\/code> Funktion kann man ein readonly Signal erzeugen, dass den Wert eines Observables verfolgt.<br \/>\nIn unserem Beispiel haben wir ein Observable <code>movies$<\/code>, welches auf die Antwort eines HTTP-Requests wartet, in unserem Fall eine Liste von Filmen. Das Signal <code>movies<\/code> wird mit <code>toSignal()<\/code> an <code>movies$<\/code> gekn\u00fcpft und sobald die Antwort da ist, und das Observable die erhaltenen Filme ausgibt, aktualisiert sich auch das <code>movies<\/code> Signal.<\/p>\n<div>\n<pre class=\"lang:default decode:true\">private movies$ = this.http.get&lt;MovieResponse&gt;(this.url).pipe(\r\n  map((data) =&gt;\r\n    data.results.map((m) =&gt; ({...m}) as Movie),\r\n  ),\r\n  shareReplay(1),\r\n);\r\n\r\nmovies = toSignal(this.movies$);<\/pre>\n<\/div>\n<p>Dieses Signal k\u00f6nnen wir dann im Template benutzen um die Filme anzuzeigen. Dadurch brauchen wir im Template auch keine async pipe mehr.<\/p>\n<p><code>toSignal()<\/code> subscribed also von selbst an das entsprechende Observable und unsubscribed auch automatisch, wenn die Komponente oder der Service in der der Aufruf gemacht wurde zerst\u00f6rt wird.<\/p>\n<p>Bei einer Sache muss man aber noch aufpassen. Da <code>toSignal()<\/code> sofort an das Observable subscribed, kann es zu verschiedenen Seiteneffekten kommen. Wenn an dem Observable z.B. ein HTTP-Request h\u00e4ngt, wird dieser Aufruf sofort ausgef\u00fchrt, unabh\u00e4ngig davon, ob es gerade eine Komponente gibt die die Daten haben m\u00f6chte. Dies kann besonders in Shared Services schwierig sein.<br \/>\nSpeicherlecks (Memory Leaks) sind ebenfalls etwas, das man im Hinterkopf behalten sollte. <code>toSignal()<\/code> kann nur in einem Injection Kontext oder mit einem Injector aufgerufen werden. Das hei\u00dft, wenn der Injector, und das damit verkn\u00fcpfte Signal, \u00fcber den Lebenszyklus der Komponente hinaus existieren, kann es zu Speicherlecks kommen. Insbesondere dann, wenn <code>toSignal()<\/code> in root Services oder root Komponenten aufgerufen wird.<\/p>\n<h3>toObservable()<\/h3>\n<p>Umgekehrt zu <code>toSignal()<\/code> erzeugt man mit <code>toObservable()<\/code> ein Observable, dass den Wert eines Signals verfolgt. Dadurch kann man z.B. einen weiteren HTTP-Request ausl\u00f6sen und weitere Daten nachladen.<br \/>\nIn unserem Beispiel haben wir ein Signal <code>selectedMovie<\/code>, dass den Film speichert den der Nutzer gerade angeklickt hat. Mit <code>toObservable()<\/code> k\u00f6nnen wir jedes mal, wenn <code>selectedMovie<\/code> sich \u00e4ndert reagieren und in der Observable-Pipeline einen weiteren HTTP-Request machen, mit dem wir die Charaktere des Films abfragen. Die entsprechende Antwort fangen wir dann mit dem <code>movieCharacters$<\/code> Observable ab.<\/p>\n<div>\n<div>\n<pre class=\"lang:default decode:true \">selectedMovie = signal&lt;Movie | undefined&gt;(undefined);\r\n\r\nprivate movieCharacters$ = toObservable(this.selectedMovie).pipe( \r\n  \/\/... Siehe den vollst\u00e4ndigen Code im StackBlitz-Projekt weiter unten\r\n  switchMap(movie =&gt; this.http.get&lt;Character&gt;(movie.characterUrl))\r\n);<\/pre>\n<\/div>\n<\/div>\n<p>Somit k\u00f6nnen wir auf synchrone Zustands\u00e4nderungen mit asynchronen Operationen reagieren. Das <code>movieCharacter$<\/code> Observable kann jetzt auch wieder mit einem Signal f\u00fcr Templates verf\u00fcgbar gemacht werden.<br \/>\nMit der <code>toSignal()<\/code> und <code>toObservable()<\/code> Funktion lassen sich asynchrone Vorg\u00e4nge sehr gut im Service abhandeln und kapseln. Nach au\u00dfen sind dann nur Signals zug\u00e4nglich, die dem synchronen State Management dienen.<\/p>\n<h2>ngxtension<\/h2>\n<p><a href=\"https:\/\/ngxtension.netlify.app\/getting-started\/introduction\/\">ngxtension<\/a> ist eine Bibliothek mit Hilfsfunktionen f\u00fcr Angular, welche das Entwickeln mit Angular einfacher machen sollen. Mittlerweile gibt es auch schon mehr als zehn Funktionen, die die Arbeit mit Signals erleichtern. Wir m\u00f6chten jetzt noch zwei dieser Funktionen vorstellen, die wir am praktischsten finden.<\/p>\n<h3>toLazySignal()<\/h3>\n<p>Die Funktion <a href=\"https:\/\/ngxtension.netlify.app\/utilities\/signals\/to-lazy-signal\/\">toLazySignal()<\/a> funktioniert \u00e4hnlich wie die originale <code>toSignal()<\/code> Funktion, mit der Ausnahme, dass nicht sofort eine Subscription erzeugt wird. <code>toLazySignal()<\/code> setzt also genau da an, wo wir oben bei <code>toSignal()<\/code> ein Problem gesehen haben. Erst wenn das Signal das erste Mal gelesen wird, subscribed Angular an das entsprechende Observable.<\/p>\n<pre class=\"\">const people = toSignal(this.people$);\r\n\r\nconst planets = toLazySignal(this.planets$);<\/pre>\n<p>An diesem Code-Schnipsel kann man sehen, dass die Funktionen genau gleich verwendet werden. Im eingebundenen StackBlitz-Projekt haben wir die beiden Funktionen in einer Komponente auch nochmal gegen\u00fcber gestellt, damit Du die Subscriptions selber ausprobieren kannst.<\/p>\n<h3>connect()<\/h3>\n<p>Die <a href=\"https:\/\/ngxtension.netlify.app\/utilities\/signals\/connect\/\">connect()<\/a> Funktion verkn\u00fcpft ein Signal mit einem Observable. Das klingt jetzt erstmal nicht anders als die <code>toSignal()<\/code> Funktion, aber w\u00e4hrend man bei <code>toSignal()<\/code> nur ein readonly Signal erh\u00e4lt, liefert <code>connect()<\/code> ein writeable Signal.<\/p>\n<p>Wenn man also den Wert eines Signals basierend auf einem Observable setzen will, kann man das wie im folgenden Beispiel machen:<\/p>\n<div>\n<pre class=\"\">connect(this.signalName, this.connectForm.valueChanges);<\/pre>\n<\/div>\n<p>Das Signal <code>signalName<\/code> wird dabei an das <code>valueChanges<\/code> Observable der FormControl gekn\u00fcpft. Immer wenn sich das Formular updated, weil der eingetragene Wert ge\u00e4ndert wird, aktualisiert sich auch das Signal.<\/p>\n<p><code>connect()<\/code> hat aber nicht nur diesen einen Anwendungszweck. Es ist ebenfalls m\u00f6glich zwei Signals miteinander zu verkn\u00fcpfen, wobei man auch wieder ein writeable Signal erh\u00e4lt, und <code>connect()<\/code> erm\u00f6glicht auch, dass eine beliebige Anzahl von Streams mit nur einem Signal verbunden werden kann. Es gibt also eine Vielzahl von Anwendungsf\u00e4llen, wo die <code>connect()<\/code> Funktion einem die Arbeit erleichtert.<\/p>\n<h2>Erfahrung ist der beste Lehrer: Hands-On mit Signals und RxJS<\/h2>\n<p>Bist Du bereit, die Theorie in die Praxis umzusetzen? In diesem interaktiven StackBlitz-Beispiel haben wir eine Beispielanwendung erstellt, die die Grundkonzepte von RxJS und Signals aufgreift und alle vorgestellten Beispiele und Funktionen beinhaltet. Tauche ein und experimentiere, um Signals und RxJS in Aktion zu erleben!<\/p>\n<p><iframe height=\"400\" style=\"width: 100%;\" src=\"https:\/\/stackblitz.com\/edit\/stackblitz-starters-jmu8cv?embed=1&amp;file=src%2Fmain.ts\" scrolling=\"no\"><span data-mce-type=\"bookmark\" style=\"display: inline-block; width: 0px; overflow: hidden; line-height: 0;\" class=\"mce_SELRES_start\">\ufeff<\/span><\/iframe><\/p>\n<h2>Und jetzt?<\/h2>\n<p>Angular Signals sind immer noch relativ neu und es wird sich zeigen wie es mit Signals, auch in weiteren Angular Versionen, noch weitergeht. Da wir alle jeden Tag dazulernen, und wir euch das Arbeiten mit Signals noch leichter machen m\u00f6chten, wollen wir im <a href=\"https:\/\/www.thecodecampus.de\/blog\/welche-vorteile-haben-angular-signal-inputs\/\">n\u00e4chsten Artikel<\/a> dieser Reihe Signal Inputs genauer betrachten und sie mit dem klassischen <code>@Input<\/code>-Dekorator vergleichen.<\/p>\n<h2 id=\"Termin\u00fcbersicht\">Termin\u00fcbersicht der n\u00e4chsten Angular Schulungen<\/h2>\n<p><iframe height=\"600\" style=\"width: 100%;\" src=\"https:\/\/thecodecampus.de\/kalender\"><span data-mce-type=\"bookmark\" style=\"display: inline-block; width: 0px; overflow: hidden; line-height: 0;\" class=\"mce_SELRES_start\">\ufeff<\/span><span data-mce-type=\"bookmark\" style=\"display: inline-block; width: 0px; overflow: hidden; line-height: 0;\" class=\"mce_SELRES_start\">\ufeff<\/span><\/iframe><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Im ersten Beitrag dieser Artikelserie, Angular Signals Teil 1 &#8211; How-to Guide f\u00fcr Angular Signals, haben wir zusammengefasst was Angular Signals sind und wie man sie verwendet. Jetzt wollen wir uns anschauen warum Signals kein Ersatz f\u00fcr RxJS sind und wie man beide Technologien am besten kombiniert. Wie bereits festgehalten, sind Signals besonders gut daf\u00fcr geeignet synchrone Zust\u00e4nde in der Anwendung zu verwalten. Damit \u00fcbernehmen sie aber eine Aufgabe die bisher von RxJS behandelt wurde. Die Frage ist also, ob Signals RxJS g\u00e4nzlich abl\u00f6sen werden? Die Antwort darauf ist: [&#8230;]<\/p>\n","protected":false},"author":32,"featured_media":2878,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[73,164,163,168,169,151,162],"tags":[112,170,172,171,173,175,174,176],"class_list":["post-2793","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-angular","category-angular-17","category-angular-performance-optimization","category-angular-signals","category-change-detection","category-optimization","category-performance","tag-angular","tag-angular-17","tag-angular-change-detection","tag-angular-signals","tag-reactive-primitive","tag-reactive-programming","tag-rxjs","tag-state-management"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.6 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Wie kombiniert man Angular Signals und RxJS<\/title>\n<meta name=\"description\" content=\"Angular 17: Finde heraus wie sich Signals und RxJS l\u00fcckenlos miteinander kombinieren lassen und verbessere die Reaktivit\u00e4t deiner Anwendung!\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.thecodecampus.de\/blog\/wie-kombiniert-man-angular-signals-und-rxjs\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Wie kombiniert man Angular Signals und RxJS\" \/>\n<meta property=\"og:description\" content=\"Angular 17: Finde heraus wie sich Signals und RxJS l\u00fcckenlos miteinander kombinieren lassen und verbessere die Reaktivit\u00e4t deiner Anwendung!\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.thecodecampus.de\/blog\/wie-kombiniert-man-angular-signals-und-rxjs\/\" \/>\n<meta property=\"og:site_name\" content=\"Web Development tips and tricks - theCodeCampus Blog\" \/>\n<meta property=\"article:published_time\" content=\"2024-04-11T07:01:11+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-04-09T09:25:26+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.thecodecampus.de\/blog\/wp-content\/uploads\/2024\/04\/Angular-Signals-Part-2.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1200\" \/>\n\t<meta property=\"og:image:height\" content=\"1200\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Anne Naumann\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Anne Naumann\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"10 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.thecodecampus.de\\\/blog\\\/wie-kombiniert-man-angular-signals-und-rxjs\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.thecodecampus.de\\\/blog\\\/wie-kombiniert-man-angular-signals-und-rxjs\\\/\"},\"author\":{\"name\":\"Anne Naumann\",\"@id\":\"https:\\\/\\\/www.thecodecampus.de\\\/blog\\\/#\\\/schema\\\/person\\\/d5533850d6a4d364e194500c24c0021a\"},\"headline\":\"Angular Signals Teil 2 &#8211; Wie kombiniert man Angular Signals und RxJS\",\"datePublished\":\"2024-04-11T07:01:11+00:00\",\"dateModified\":\"2026-04-09T09:25:26+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.thecodecampus.de\\\/blog\\\/wie-kombiniert-man-angular-signals-und-rxjs\\\/\"},\"wordCount\":1633,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/www.thecodecampus.de\\\/blog\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/www.thecodecampus.de\\\/blog\\\/wie-kombiniert-man-angular-signals-und-rxjs\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.thecodecampus.de\\\/blog\\\/wp-content\\\/uploads\\\/2024\\\/04\\\/Angular-Signals-Part-2.png\",\"keywords\":[\"Angular\",\"Angular 17\",\"Angular Change Detection\",\"Angular Signals\",\"Reactive Primitive\",\"Reactive Programming\",\"RxJS\",\"State Management\"],\"articleSection\":[\"Angular\",\"Angular 17\",\"Angular Performance Optimization\",\"Angular Signals\",\"Change Detection\",\"Optimization\",\"Performance\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/www.thecodecampus.de\\\/blog\\\/wie-kombiniert-man-angular-signals-und-rxjs\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.thecodecampus.de\\\/blog\\\/wie-kombiniert-man-angular-signals-und-rxjs\\\/\",\"url\":\"https:\\\/\\\/www.thecodecampus.de\\\/blog\\\/wie-kombiniert-man-angular-signals-und-rxjs\\\/\",\"name\":\"Wie kombiniert man Angular Signals und RxJS\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.thecodecampus.de\\\/blog\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.thecodecampus.de\\\/blog\\\/wie-kombiniert-man-angular-signals-und-rxjs\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.thecodecampus.de\\\/blog\\\/wie-kombiniert-man-angular-signals-und-rxjs\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.thecodecampus.de\\\/blog\\\/wp-content\\\/uploads\\\/2024\\\/04\\\/Angular-Signals-Part-2.png\",\"datePublished\":\"2024-04-11T07:01:11+00:00\",\"dateModified\":\"2026-04-09T09:25:26+00:00\",\"description\":\"Angular 17: Finde heraus wie sich Signals und RxJS l\u00fcckenlos miteinander kombinieren lassen und verbessere die Reaktivit\u00e4t deiner Anwendung!\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.thecodecampus.de\\\/blog\\\/wie-kombiniert-man-angular-signals-und-rxjs\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.thecodecampus.de\\\/blog\\\/wie-kombiniert-man-angular-signals-und-rxjs\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.thecodecampus.de\\\/blog\\\/wie-kombiniert-man-angular-signals-und-rxjs\\\/#primaryimage\",\"url\":\"https:\\\/\\\/www.thecodecampus.de\\\/blog\\\/wp-content\\\/uploads\\\/2024\\\/04\\\/Angular-Signals-Part-2.png\",\"contentUrl\":\"https:\\\/\\\/www.thecodecampus.de\\\/blog\\\/wp-content\\\/uploads\\\/2024\\\/04\\\/Angular-Signals-Part-2.png\",\"width\":1200,\"height\":1200,\"caption\":\"Angular Signals Part 2\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.thecodecampus.de\\\/blog\\\/wie-kombiniert-man-angular-signals-und-rxjs\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.thecodecampus.de\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Angular Signals Teil 2 &#8211; Wie kombiniert man Angular Signals und RxJS\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.thecodecampus.de\\\/blog\\\/#website\",\"url\":\"https:\\\/\\\/www.thecodecampus.de\\\/blog\\\/\",\"name\":\"Web Development tips and tricks - theCodeCampus Blog\",\"description\":\"Tips, tricks, and experiences about developing web and mobile applications with Angular, TypeScript, and Testing.\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.thecodecampus.de\\\/blog\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.thecodecampus.de\\\/blog\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/www.thecodecampus.de\\\/blog\\\/#organization\",\"name\":\"theCodeCampus\",\"url\":\"https:\\\/\\\/www.thecodecampus.de\\\/blog\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.thecodecampus.de\\\/blog\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/www.thecodecampus.de\\\/blog\\\/wp-content\\\/uploads\\\/2024\\\/01\\\/TCC-Logo-Bildmarke-quadratisch.jpg\",\"contentUrl\":\"https:\\\/\\\/www.thecodecampus.de\\\/blog\\\/wp-content\\\/uploads\\\/2024\\\/01\\\/TCC-Logo-Bildmarke-quadratisch.jpg\",\"width\":156,\"height\":156,\"caption\":\"theCodeCampus\"},\"image\":{\"@id\":\"https:\\\/\\\/www.thecodecampus.de\\\/blog\\\/#\\\/schema\\\/logo\\\/image\\\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/www.thecodecampus.de\\\/blog\\\/#\\\/schema\\\/person\\\/d5533850d6a4d364e194500c24c0021a\",\"name\":\"Anne Naumann\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.thecodecampus.de\\\/blog\\\/wp-content\\\/uploads\\\/2024\\\/11\\\/anne-naumann-tcc-author-96x96.webp\",\"url\":\"https:\\\/\\\/www.thecodecampus.de\\\/blog\\\/wp-content\\\/uploads\\\/2024\\\/11\\\/anne-naumann-tcc-author-96x96.webp\",\"contentUrl\":\"https:\\\/\\\/www.thecodecampus.de\\\/blog\\\/wp-content\\\/uploads\\\/2024\\\/11\\\/anne-naumann-tcc-author-96x96.webp\",\"caption\":\"Anne Naumann\"},\"description\":\"Hi, I'm a web developer with a focus on frontend technologies, especially Angular. I also have a lot of fun when it comes to UI\\\/UX and when I need to make room for new books on my bookshelves.\",\"sameAs\":[\"https:\\\/\\\/thecodecampus.de\\\/ueber-uns\\\/trainer\\\/anne-naumann\",\"https:\\\/\\\/www.linkedin.com\\\/in\\\/anne-naumann-1ab635307\\\/\"],\"url\":\"https:\\\/\\\/www.thecodecampus.de\\\/blog\\\/author\\\/anaumann\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Wie kombiniert man Angular Signals und RxJS","description":"Angular 17: Finde heraus wie sich Signals und RxJS l\u00fcckenlos miteinander kombinieren lassen und verbessere die Reaktivit\u00e4t deiner Anwendung!","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.thecodecampus.de\/blog\/wie-kombiniert-man-angular-signals-und-rxjs\/","og_locale":"en_US","og_type":"article","og_title":"Wie kombiniert man Angular Signals und RxJS","og_description":"Angular 17: Finde heraus wie sich Signals und RxJS l\u00fcckenlos miteinander kombinieren lassen und verbessere die Reaktivit\u00e4t deiner Anwendung!","og_url":"https:\/\/www.thecodecampus.de\/blog\/wie-kombiniert-man-angular-signals-und-rxjs\/","og_site_name":"Web Development tips and tricks - theCodeCampus Blog","article_published_time":"2024-04-11T07:01:11+00:00","article_modified_time":"2026-04-09T09:25:26+00:00","og_image":[{"width":1200,"height":1200,"url":"https:\/\/www.thecodecampus.de\/blog\/wp-content\/uploads\/2024\/04\/Angular-Signals-Part-2.png","type":"image\/png"}],"author":"Anne Naumann","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Anne Naumann","Est. reading time":"10 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.thecodecampus.de\/blog\/wie-kombiniert-man-angular-signals-und-rxjs\/#article","isPartOf":{"@id":"https:\/\/www.thecodecampus.de\/blog\/wie-kombiniert-man-angular-signals-und-rxjs\/"},"author":{"name":"Anne Naumann","@id":"https:\/\/www.thecodecampus.de\/blog\/#\/schema\/person\/d5533850d6a4d364e194500c24c0021a"},"headline":"Angular Signals Teil 2 &#8211; Wie kombiniert man Angular Signals und RxJS","datePublished":"2024-04-11T07:01:11+00:00","dateModified":"2026-04-09T09:25:26+00:00","mainEntityOfPage":{"@id":"https:\/\/www.thecodecampus.de\/blog\/wie-kombiniert-man-angular-signals-und-rxjs\/"},"wordCount":1633,"commentCount":0,"publisher":{"@id":"https:\/\/www.thecodecampus.de\/blog\/#organization"},"image":{"@id":"https:\/\/www.thecodecampus.de\/blog\/wie-kombiniert-man-angular-signals-und-rxjs\/#primaryimage"},"thumbnailUrl":"https:\/\/www.thecodecampus.de\/blog\/wp-content\/uploads\/2024\/04\/Angular-Signals-Part-2.png","keywords":["Angular","Angular 17","Angular Change Detection","Angular Signals","Reactive Primitive","Reactive Programming","RxJS","State Management"],"articleSection":["Angular","Angular 17","Angular Performance Optimization","Angular Signals","Change Detection","Optimization","Performance"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.thecodecampus.de\/blog\/wie-kombiniert-man-angular-signals-und-rxjs\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.thecodecampus.de\/blog\/wie-kombiniert-man-angular-signals-und-rxjs\/","url":"https:\/\/www.thecodecampus.de\/blog\/wie-kombiniert-man-angular-signals-und-rxjs\/","name":"Wie kombiniert man Angular Signals und RxJS","isPartOf":{"@id":"https:\/\/www.thecodecampus.de\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.thecodecampus.de\/blog\/wie-kombiniert-man-angular-signals-und-rxjs\/#primaryimage"},"image":{"@id":"https:\/\/www.thecodecampus.de\/blog\/wie-kombiniert-man-angular-signals-und-rxjs\/#primaryimage"},"thumbnailUrl":"https:\/\/www.thecodecampus.de\/blog\/wp-content\/uploads\/2024\/04\/Angular-Signals-Part-2.png","datePublished":"2024-04-11T07:01:11+00:00","dateModified":"2026-04-09T09:25:26+00:00","description":"Angular 17: Finde heraus wie sich Signals und RxJS l\u00fcckenlos miteinander kombinieren lassen und verbessere die Reaktivit\u00e4t deiner Anwendung!","breadcrumb":{"@id":"https:\/\/www.thecodecampus.de\/blog\/wie-kombiniert-man-angular-signals-und-rxjs\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.thecodecampus.de\/blog\/wie-kombiniert-man-angular-signals-und-rxjs\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.thecodecampus.de\/blog\/wie-kombiniert-man-angular-signals-und-rxjs\/#primaryimage","url":"https:\/\/www.thecodecampus.de\/blog\/wp-content\/uploads\/2024\/04\/Angular-Signals-Part-2.png","contentUrl":"https:\/\/www.thecodecampus.de\/blog\/wp-content\/uploads\/2024\/04\/Angular-Signals-Part-2.png","width":1200,"height":1200,"caption":"Angular Signals Part 2"},{"@type":"BreadcrumbList","@id":"https:\/\/www.thecodecampus.de\/blog\/wie-kombiniert-man-angular-signals-und-rxjs\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.thecodecampus.de\/blog\/"},{"@type":"ListItem","position":2,"name":"Angular Signals Teil 2 &#8211; Wie kombiniert man Angular Signals und RxJS"}]},{"@type":"WebSite","@id":"https:\/\/www.thecodecampus.de\/blog\/#website","url":"https:\/\/www.thecodecampus.de\/blog\/","name":"Web Development tips and tricks - theCodeCampus Blog","description":"Tips, tricks, and experiences about developing web and mobile applications with Angular, TypeScript, and Testing.","publisher":{"@id":"https:\/\/www.thecodecampus.de\/blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.thecodecampus.de\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/www.thecodecampus.de\/blog\/#organization","name":"theCodeCampus","url":"https:\/\/www.thecodecampus.de\/blog\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.thecodecampus.de\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/www.thecodecampus.de\/blog\/wp-content\/uploads\/2024\/01\/TCC-Logo-Bildmarke-quadratisch.jpg","contentUrl":"https:\/\/www.thecodecampus.de\/blog\/wp-content\/uploads\/2024\/01\/TCC-Logo-Bildmarke-quadratisch.jpg","width":156,"height":156,"caption":"theCodeCampus"},"image":{"@id":"https:\/\/www.thecodecampus.de\/blog\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/www.thecodecampus.de\/blog\/#\/schema\/person\/d5533850d6a4d364e194500c24c0021a","name":"Anne Naumann","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.thecodecampus.de\/blog\/wp-content\/uploads\/2024\/11\/anne-naumann-tcc-author-96x96.webp","url":"https:\/\/www.thecodecampus.de\/blog\/wp-content\/uploads\/2024\/11\/anne-naumann-tcc-author-96x96.webp","contentUrl":"https:\/\/www.thecodecampus.de\/blog\/wp-content\/uploads\/2024\/11\/anne-naumann-tcc-author-96x96.webp","caption":"Anne Naumann"},"description":"Hi, I'm a web developer with a focus on frontend technologies, especially Angular. I also have a lot of fun when it comes to UI\/UX and when I need to make room for new books on my bookshelves.","sameAs":["https:\/\/thecodecampus.de\/ueber-uns\/trainer\/anne-naumann","https:\/\/www.linkedin.com\/in\/anne-naumann-1ab635307\/"],"url":"https:\/\/www.thecodecampus.de\/blog\/author\/anaumann\/"}]}},"_links":{"self":[{"href":"https:\/\/www.thecodecampus.de\/blog\/wp-json\/wp\/v2\/posts\/2793","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.thecodecampus.de\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.thecodecampus.de\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.thecodecampus.de\/blog\/wp-json\/wp\/v2\/users\/32"}],"replies":[{"embeddable":true,"href":"https:\/\/www.thecodecampus.de\/blog\/wp-json\/wp\/v2\/comments?post=2793"}],"version-history":[{"count":38,"href":"https:\/\/www.thecodecampus.de\/blog\/wp-json\/wp\/v2\/posts\/2793\/revisions"}],"predecessor-version":[{"id":3710,"href":"https:\/\/www.thecodecampus.de\/blog\/wp-json\/wp\/v2\/posts\/2793\/revisions\/3710"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.thecodecampus.de\/blog\/wp-json\/wp\/v2\/media\/2878"}],"wp:attachment":[{"href":"https:\/\/www.thecodecampus.de\/blog\/wp-json\/wp\/v2\/media?parent=2793"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.thecodecampus.de\/blog\/wp-json\/wp\/v2\/categories?post=2793"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.thecodecampus.de\/blog\/wp-json\/wp\/v2\/tags?post=2793"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}