Как использовать собственные якорные ссылки с angularjs

Я использую angularjs на довольно большой плоской странице документации. На странице есть некоторая навигация, предназначенная для использования традиционных хеш-ссылок URL. URL-адреса выглядят так:

/documentation/flat#26166276-basic-events

Эти URL-адреса переписываются, как только происходит навигация, и я нажимаю на следующую страницу. angular инициализирует что-то вроде: /documentation/flat#/26166276-basic-events

Это ломает навигацию. Кажется, это работает, если я уже нахожусь на пути /documentation/flat и нажимаю один из URL-адресов хеша. Он переписывается, но браузер по-прежнему фокусируется на правильном разделе страницы.

Однако, если URL-адрес хэша запускается с другого пути, браузер не будет фокусироваться на правильном элементе DOM, поскольку происходит перезапись angularjs.

Редактировать: так выглядит разметка для ссылки

<a href="/documentation/flat#26166276-basic-events">Basic Events</a>

<h1 class="chap-header" id="26166276-basic-events">2.1.0 Basic Events</h1>

person kevzettler    schedule 21.11.2013    source источник
comment
Как выглядит ваша разметка?   -  person Justin Niessner    schedule 22.11.2013
comment
@JustinNiessner добавил пример разметки   -  person kevzettler    schedule 22.11.2013
comment
Вы уверены, что URL-адрес переписывается в теге, а не на странице, на которую вы переходите (после перехода)?   -  person Justin Niessner    schedule 22.11.2013
comment
Извините за уточнение, URL-адрес переписывается после того, как происходит навигация, он буквально меняет URL-адрес в адресной строке браузера.   -  person kevzettler    schedule 22.11.2013
comment
Тогда вы можете удалить это и задать вопрос Как заставить Angular хорошо работать с другими значениями хеша?   -  person Justin Niessner    schedule 22.11.2013


Ответы (2)


Эта тема еще обсуждалась здесь:

Как обрабатывать привязку хэш-ссылки в AngularJS

Я использовал вариант из этой темы

if $location.$$url[0]== '#'
        $location.hash($location.$$url.replace('#', ''))
        $anchorScroll()

это в основном позволяет мне добавлять к любым якорным ссылкам дополнительный префикс #, а angularjs рассматривает их как традиционные якоря.

person kevzettler    schedule 22.11.2013

Есть очень глупое решение: поставить / в начале идентификатора привязки!

<a id='/my-id' />
person Chriseyre2000    schedule 21.01.2016