Могу ли я вернуть управление хэш-фрагментом URL из AngularJS?

Я использую AngularJS и хочу обработать данный #hash-fragment в адресной строке. Однако, и это ключевое слово - я не буду использовать хэш-фрагмент для кодирования пути. Но, похоже, AngularJS настаивает на его интерпретации таким образом.

Например, когда html5Mode отключено:

  • Указанный URL: http://my.domain.com#my-hash
  • превращается в http://my.domain.com/#/my-hash, а
  • $location.hash() будет пустым.

И когда включено html5Mode:

  • Указанный URL: http://my.domain.com#my-hash
  • превращается в http://my.domain.com/my-hash, а
  • $location.hash() по-прежнему будет пустым.

AngularJS должен думать: "О, у вас есть html5, позвольте мне удалить этот хэш для вас". Как важно...

Единственный способ получить что-либо из $location.hash() - это когда URL имеет двойной хэш:

  • Для заданного URL: http://my.domain.com##my-hash
  • $location.hash(), наконец, равен "my-hash", а
  • если также $locationProvider.html5Mode(true) один из хэшей удаляется из URL.

Но мне действительно нужен простой одиночный хэш-символ, который останется необработанным. Возможно ли это?

Ответы

Ответ 1

#, похоже, работает достаточно хорошо на странице angular api docs. Поэтому с небольшим отслеживанием и тестированием я обнаружил, что

app.config(function($locationProvider) {
    $locationProvider.html5Mode(true).hashPrefix('!');
});

делает разницу.