AngularJS: como ativar $ locationProvider.html5Mode com deeplink

Ao ativar o html5Mode no AngularJS via $locationProvider.html5Mode(true) , a navegação parece estar distorcida quando você acessa uma página mais profunda no site.

por exemplo:

Talvez a reescrita no servidor precise ser feita de forma diferente, ou eu preciso especificar coisas em angular, mas atualmente eu não tenho a mínima ideia do motivo pelo qual o caminho do angular é visto sem o segmento /news incluído.

exemplo main.js:

 // Create an application module var App = angular.module('App', []); App.config(['$routeProvider', '$locationProvider', function AppConfig($routeProvider, $locationProvider) { $routeProvider .when( '/', { redirectTo: '/home' }) .when('/home', { templateUrl: 'templates/home.html' }) .when('/login', { templateUrl: 'templates/login.html' }) .when('/news', { templateUrl: 'templates/news.html' }) .when('/news/archive', { templateUrl: 'templates/newsarchive.html' }) // removed other routes ... *snip .otherwise({ redirectTo: '/home' } ); // enable html5Mode for pushstate ('#'-less URLs) $locationProvider.html5Mode(true); $locationProvider.hashPrefix('!'); }]); // Initialize the application App.run(['$location', function AppRun($location) { debugger; // -->> here i debug the $location object to see what angular see's as URL }]); 

Edite como por solicitação, mais detalhes no lado do servidor: o lado do servidor é organizado pelo roteamento do framework zend, e ele lida com suas próprias rotas (para servir dados ao frontend em URLs específicas /api e, no final, há uma rota pega-tudo, se nenhuma outra rota específica estiver vinculada, ela serve o mesmo html que a rota raiz, de modo que ela basicamente serve a página inicial html nessa rota deeplinkada.

Atualização 2 depois de olhar para o problema, notamos que este roteamento funciona bem como é, no Angular 1.0.7 estável, mas mostra o comportamento descrito acima no Angular 1.1.5 instável.

Eu verifiquei os logs de alterações, mas não encontrei nada útil até agora, acho que podemos enviá-lo como um bug, ou comportamento indesejado ligado a uma determinada mudança que eles fizeram, ou apenas esperar e ver se ele está consertado o posterior a ser lançado versão estável.

Descobri que não há bug lá. Apenas adicione:

  

para o seu .

Esta foi a melhor solução que encontrei depois de mais tempo do que eu gostaria de admitir. Basicamente, adicione target = “_ self” para cada link que você precisa para garantir uma recarga de página.

http://blog.panjiesw.com/posts/2013/09/angularjs-normal-links-with-html5mode/

Este problema foi devido ao uso do AngularJS 1.1.5 (que era instável, e obviamente tinha algum bug ou implementação diferente do roteamento do que estava em 1.0.7)

voltar para o 1.0.7 resolveu o problema instantaneamente.

tentei a versão 1.2.0rc1, mas ainda não terminei os testes, já que precisei rewrite parte da funcionalidade do roteador, já que eles o tiraram do núcleo.

De qualquer forma, este problema é corrigido ao usar o AngularJS vs 1.0.7.

  1. Configurar o AngularJS

$ location / alternando entre html5 e modo hashbang / reescrita de links

  1. Configure seu servidor:

https://github.com/angular-ui/ui-router/wiki/Frequently-Asked-Questions#wiki-como-configure-your-server-to-work-with-html5mode

Meu problema resolvido com estes:

1- Adicione isto à sua cabeça:

  

2- Use isso no app.config

 $locationProvider.html5Mode(true);