ngRoute es un módulo creado por el equipo de Angular que proporciona una funcionalidad básica de enrutamiento del lado del cliente. Este módulo proporciona una base bastante poderosa para el enrutamiento, y se puede construir con bastante facilidad para proporcionar una funcionalidad de enrutamiento sólida, como se ejemplifica en esta publicación de blog (asegúrese de leer el rastro de comentarios entre Ward Bell y Ben Nadel, el autor: son un par de profesionales angulares)
ui-router cambia el foco de las rutas centradas en la URL a los "estados" de la aplicación, que pueden reflejarse o no en la URL.
Las características principales agregadas por ui-router son estados anidados y vistas con nombre.
Los estados anidados le permiten separar la lógica del controlador para las distintas partes de la aplicación. Un ejemplo muy simple de esto sería una aplicación con navegación principal en la parte superior, una lista de navegación secundaria a la izquierda y contenido a la derecha. Sin estados anidados, un solo controlador normalmente tendría que manejar la lógica de visualización para la navegación secundaria, así como el contenido. El enrutamiento anidado le permite separar estas preocupaciones.
Las vistas con nombre son otra característica adicional de ui-router. Con ngRoute, solo puede tener una sola directiva ngView en una página, mientras que con vistas con nombre en ui-router puede especificar múltiples directivas ui-view, y luego cada estado puede afectar la plantilla y el controlador de las vistas de nombres. Un ejemplo súper simple de esto sería tener el contenido principal de su aplicación como la vista principal, y luego también tener una barra de pie de página que sería una vista de interfaz de usuario separada. En este escenario, el controlador del pie de página ya no tiene que escuchar los cambios de estado / ruta.
Se puede encontrar una buena comparación de ngRoute y ui-router en este episodio de podcast .
Solo para hacer las cosas más confusas, esté atento al nuevo módulo de enrutamiento "oficial" que el equipo de Angular espera lanzar para las versiones 1.5 y 2.0 de Angular. Esto reemplazará el módulo ngRoute. Aquí está la documentación actual para el nuevo módulo de enrutador: es bastante escasa a partir de esta publicación ya que la implementación aún no se ha finalizado. Mire aquí para obtener más noticias sobre cuándo se lanzará este módulo.