O ngRoute é um módulo criado pela equipe Angular que fornece funcionalidade básica de roteamento do lado do cliente. Este módulo fornece uma base bastante poderosa para roteamento e pode ser construído com bastante facilidade para fornecer funcionalidade sólida de roteamento, como exemplificado nesta postagem do blog (leia a trilha de comentários entre Ward Bell e Ben Nadel, o autor - eles são um par de profissionais angulares)
O ui-router muda o foco das rotas centradas no URL para os "estados" do aplicativo, que podem ou não ser refletidos no URL.
Os principais recursos adicionados pelo ui-router são estados aninhados e visualizações nomeadas.
Os estados aninhados permitem separar a lógica do controlador para as várias partes do aplicativo. Um exemplo muito simples disso seria um aplicativo com navegação primária na parte superior, uma lista de navegação secundária à esquerda e conteúdo à direita. Sem estados aninhados, um único controlador normalmente teria que lidar com a lógica de exibição da navegação secundária e do conteúdo. O roteamento aninhado permite separar essas preocupações.
As visualizações nomeadas são outro recurso adicional do ui-router. Com o ngRoute, você pode ter apenas uma única diretiva ngView em uma página, enquanto que nas exibições nomeadas no roteador da interface do usuário, você pode especificar várias diretivas de visualização da interface do usuário, e cada estado pode afetar o modelo e o controlador das exibições de nomes. Um exemplo super simples disso seria fazer com que o conteúdo principal do seu aplicativo fosse a visualização principal e também ter uma barra de rodapé que seria uma visualização da interface do usuário separada. Nesse cenário, o controlador de rodapé não precisa mais ouvir alterações de estado / rota.
Uma boa comparação entre ngRoute e ui-router pode ser encontrada neste episódio de podcast .
Apenas para tornar as coisas mais confusas, fique de olho no novo módulo de roteamento "oficial" que a equipe do Angular espera lançar para as versões 1.5 e 2.0 do Angular. Isso substituirá o módulo ngRoute. Aqui está a documentação atual para o novo módulo Roteador - ela é bastante escassa a partir desta publicação, pois a implementação ainda não foi finalizada. Assista aqui para mais notícias sobre quando este módulo será realmente lançado.