Могу ли я вернуть управление хэш-фрагментом 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('!');
});
делает разницу.