http://localhost:4200/home oder http://localhost:4200/settings. Normalerweise navigieren wir jedoch nicht, indem wir Adressen in die URL-Leiste eingeben.
Navigation
Wie ich gerade erwähnt habe, möchten wir nicht, dass unsere Benutzer die URL manuell ändern müssen. Wir möchten, dass sie auf Buttons klicken, wischen oder einfach automatisch zu der gewünschten Seite weitergeleitet werden können. Dazu gibt es im Wesentlichen zwei Möglichkeiten:- Wenn wir möchten, dass der Benutzer einfach auf etwas klickt und dann zu einer bestimmten Seite weitergeleitet wird, können wir
routerLinkim Template verwenden. - Wenn wir programmgesteuert navigieren müssen, können wir
router.navigate()in der Klasse verwenden.
`routerLink`
`routerLink`
/ am Anfang unserer Route verwenden, wird die Route vom Stammverzeichnis der Anwendung aus gesucht. Wenn wir ./ verwenden, wird die Route relativ zur aktuell aktiven Route gesucht. Wenn wir stattdessen Folgendes tun würden:home/settings zu finden, der nicht existiert. Wenn jedoch innerhalb einzelner Module untergeordnete Pfade vorhanden sind, kann der relative Pfad die Navigation erleichtern.`router.navigate()`
`router.navigate()`
Routing Parameter
Manchmal möchten wir nicht nur zu einer Route navigieren, sondern ihr auch einige Informationen übergeben. Eine Möglichkeit hierfür sind Routing Parameter. Das Grundprinzip ist relativ einfach. Bei der Definition der Route verwenden wir diese spezielle Syntax mit einem Doppelpunkt:Movie-Page auf diesen Wert zugreifen. Wie genau das funktioniert, besprechen wir im nächsten Abschnitt.
Normalerweise übergeben wir eine dynamische id oder einen anderen Wert an eine Route und nicht nur einen statischen Wert wie oben.
routerLink nutzen, um es zu erstellen:
navigation-Methode verwenden:
Daten übertragen
Im vorherigen Abschnitt haben wir gesehen, dass es recht einfach ist, einen Parameter über die Route zu übergeben, wenn man zu einer Seite navigiert, aber wie verwenden wir ihn? Betrachten wir die klassische Situation eines Master/Detail-Musters. Wir haben eine Seite, auf der eine Liste von Daten angezeigt wird – vielleicht Titel von Filmen – und wenn wir auf eines dieser Elemente klicken, gelangen wir zu einer Detailseite mit weiteren Informationen zu diesem Film. Wir könnten Routen wie folgt einrichten:id unseres Films ganz einfach mithilfe des Routing Parameters an die Detailseite übergeben und auf dieser Seite auf diese id zugreifen. Wir möchten jedoch nicht nur eine id, sondern das gesamte Filmobjekt – was sich nicht so gut für die Übermittlung über die URL eignet. Möglicherweise möchten wir zusätzliche Informationen zu diesem Film abrufen, wie eine Beschreibung, einen Trailer, eine Bewertung, Kommentare, Rezensionen usw.
Normalerweise übergeben wir einfach eine einfache Kennung als Parameter, beispielsweise die id, und rufen dann auf unserer Detailseite die vollständigen Daten von einem Service unter Verwendung dieses id-Werts ab.
Wir könnten einen Service wie folgt einrichten:
getMovieById aufrufen, die uns einen Stream zurückgibt, der die vom Server abgerufenen Daten ausgibt.
Nachdem wir unseren Service eingerichtet haben, können wir diesen in unsere DetailPage einfügen, zusammen mit den Informationen für die ActivatedRoute, um die übergebene id abzurufen und auf einen Stream mit den Filmdetails zuzugreifen:
DetailPage alle Details zu einem bestimmten Film, und wir können diese in der Vorlage nach Belieben anzeigen. Wenn wir zurück zu unserer Startseite gehen und einen anderen Film auswählen, werden stattdessen die Details zu diesem Film geladen.