NgRoute ist ein von dem Angular-Team entwickeltes Modul, das grundlegende clientseitige Routing-Funktionalitäten bietet. Dieses Modul liefert eine ziemlich leistungsstarke Basis für das Routing und kann recht einfach erweitert werden, um solide Routing-Funktionalitäten bereitzustellen, wie im diesem Blogbeitrag (lesen Sie unbedingt den Kommentarverlauf zwischen Ward Bell und Ben Nadel, dem Autor - sie sind ein paar Angular-Profis).
ui-router verschiebt den Fokus von url-zentrierten Routen zu Anwendungs-"Zuständen", die sich möglicherweise nicht im URL widerspiegeln.
Die Hauptfunktionen, die von ui-router hinzugefügt werden, sind verschachtelte Zustände und benannte Ansichten.
Verschachtelte Zustände ermöglichen es Ihnen, die Controller-Logik für die verschiedenen Teile der Anwendung zu trennen. Ein sehr einfaches Beispiel hierfür wäre eine App mit einer Hauptnavigation oben, einer sekundären Navigationsliste links und Inhalten rechts. Ohne verschachtelte Zustände müsste ein einzelner Controller typischerweise die Anzeigelogik sowohl für die sekundäre Navigation als auch für den Inhalt verarbeiten. Das verschachtelte Routing ermöglicht es Ihnen, diese Anliegen zu trennen.
Benannte Ansichten sind ein weiteres zusätzliches Feature von ui-router. Mit ngRoute können Sie nur eine einzelne ngView-Direktive auf einer Seite haben, während Sie mit benannten Ansichten in ui-router mehrere ui-view-Direktiven angeben können, und dann kann jeder Zustand das Template und den Controller der benannten Ansichten beeinflussen. Ein sehr einfaches Beispiel dafür wäre, den Hauptinhalt Ihrer App als primäre Ansicht zu haben und dann auch eine Fußzeile zu haben, die eine separate ui-view ist. In diesem Szenario muss der Controller der Fußzeile nicht mehr auf Zustands-/Routenänderungen hören.
Einen guten Vergleich von ngRoute und ui-router finden Sie in dieser Podcast-Episode.
Nur um die Dinge zu komplizieren, achten Sie auf das neue "offizielle" Routing-Modul, das das Angular-Team für die Versionen 1.5 und 2.0 von Angular herausbringen möchte. Dieses wird das ngRoute-Modul ersetzen. Hier finden Sie die aktuelle Dokumentation für das neue Router-Modul - sie ist zum Zeitpunkt dieses Posts recht spärlich, da die Implementierung noch nicht abgeschlossen ist. Schauen Sie hier nach weiteren Neuigkeiten darüber, wann dieses Modul tatsächlich veröffentlicht wird.