Когда я использую $ location.hash("section1"), URL-адрес заканчивается как http://thing/place #/section1. Когда я снова использую $ location.hash("section1"), URL-адрес становится http://thing/place #/section1 # section1. Это довольно удивительно. (Дальнейшее использование $ location.hash("section1") действует более или менее, как ожидалось, изменяя последнюю часть URL-адреса после второго #.)
Контекст: страница, которую я создаю, представляет собой одностраничное приложение в AngularJS, где несколько разделов страницы выложены как шаблоны; там находится контроллер верхнего уровня, а шаблоны скрыты/показаны на основе свойства, называемого "режим" в объеме этого контроллера. Я использую $ location.hash() довольно красиво: когда этот контроллер верхнего уровня загружается, он устанавливает режим в зависимости от содержимого $ location.hash(). (И там $ watch в режиме, который вызывает $ location.hash("modeName") при изменении режима.)
Как я могу убедить $ location.hash(), чтобы добавить только один URL-адрес, так что я могу использовать $ location.hash() для установки и получения текущего режима?
Оказалось, что я не задал режим html5 в $ locationProvider. (Я был удивлен, я думал, что в режиме non-html5 всегда был режим hashbang, и когда я не видел взрыва перед хэшем, я предположил, что что-то еще происходит.) В качестве примечания, мои часы на $ location.hash() также вызвал бесконечный цикл (установите hash на "#thing", AngularJS устанавливает хеш в "#/вещь", повторите.), но это не было связано.
Для потомков способ установки режима html5 в службе определения местоположения состоит в том, чтобы добавить это к вашей инициализации:
Angular.module(....)
....controllers, services & squid....
.config(function ($locationProvider) {
$locationProvider.html5Mode(true);
});