AngularJS 1.1.5 - автоматическое добавление хэш-тега к URL-адресам

Кто-нибудь знает, почему версия 1.1.5 автоматически добавляет хэштег к вашим URL-адресам и как это отключить? ИМО это некрасиво выглядит. Это происходит всякий раз, когда у вас есть URL-адрес, который не заканчивается косой чертой. (Я не использую маршруты или что-то в этом роде).

Итак, это:

http://my.website.com/about

становится

http://my.website.com/about#/about

и это:

http://my.website.com/about.html

становится:

http://my.website.com/about.html#/about.html

но это:

http://my.website.com/about/

не имеет этой проблемы.


person Kevin Beal    schedule 27.06.2013    source источник
comment
как вы устанавливаете местоположение? Похоже, вы используете $location.path('about.html');   -  person Brian Lewis    schedule 27.06.2013
comment
@moderngrade Я не использую никакие маршруты. Я не использую $locaton. Это не приложение, просто угловые контроллеры на стандартной веб-странице. Путь задается с использованием фактических якорей и полной загрузки страницы.   -  person Kevin Beal    schedule 27.06.2013
comment
Я также вижу эту проблему: ни один из моих кодов не устанавливает $location (у меня есть точки останова везде, где я его касаюсь, и они не попадают), и проблема не возникает с angular 1.1.4, так что это похоже на то, что фреймворк делает   -  person jssebastian    schedule 27.06.2013


Ответы (3)


Я столкнулся с этой проблемой буквально на днях. Я решил это, включив режим HTML5 для $locationProvider. См. документы для $location — режим HTML5 Обновлена ​​ссылка для $location — режим HTML5.

Это должно выглядеть примерно так:

.config(['$locationProvider', function($locationProvider){
    $locationProvider.html5Mode(true).hashPrefix('!');
}]);
person EnigmaRM    schedule 20.08.2013
comment
Вы спасли мою жизнь. Они собирались взять мои большие пальцы! - person Kevin Beal; 21.08.2013
comment
Ха-ха. Что ж, я рад, что ты можешь оставить свои пальцы еще на один день. Облегчает нажатие пробела. Тем не менее, мой левый большой палец практически бесполезен при наборе текста. Так что пусть возьмут этот большой палец, если потребуют его в будущем :) - person EnigmaRM; 21.08.2013
comment
Однако это создает новую проблему, заключающуюся в том, что обычные якоря, идущие на другую страницу, превращаются в ссылки истории, и страница никуда не уходит. Однако это можно решить, сделав ваши ссылки target="_self". Выполнение чего-то вроде $('[href]').attr('target', '_self') устраняет эту проблему. Если бы вы могли добавить что-то об этом к своему ответу, я буду вашим лучшим другом. - person Kevin Beal; 23.08.2013
comment
Это странно. Переключение на режим HTML5 не вызвало у меня этой проблемы. Мои ссылки до сих пор работают. Не видя больше кода, я не уверен, в чем разница. Может быть, это связано с установкой base_url в вашем <head>? - person EnigmaRM; 26.08.2013
comment
@abden003 abden003 Я выполнил поиск в Google и обновил для вас ссылку на Документы. - person EnigmaRM; 19.09.2015
comment
Хорошо, это решило проблему с хешированием, но заставило весь сайт заморозить якоря и ссылки, как будто по ним не нажимали! - person Mohamad Al Asmar; 13.10.2016

Кажется, это ошибка, появившаяся в angularjs 1.1.5 (поскольку 1.1.4 не имеет этой проблемы). Я сообщил об ошибке здесь:

https://github.com/angular/angular.js/issues/3083

person jssebastian    schedule 27.06.2013

В $ routeProvider установите режим HTML5 как истинный, как показано ниже.

$locationProvider.html5Mode(true);

И в разделе заголовка вашей страницы добавьте следующую строку

<base href="/">
person vijay    schedule 28.08.2017