Я изучаю AngularJS, и есть одна вещь, которая действительно раздражает меня.
Я использую, $routeProvider
чтобы объявить правила маршрутизации для моего приложения:
$routeProvider.when('/test', {
controller: TestCtrl,
templateUrl: 'views/test.html'
})
.otherwise({ redirectTo: '/test' });
но когда я перехожу к своему приложению в браузере, я вижу app/#/test
вместо app/test
.
Итак, мой вопрос: почему AngularJS добавляет этот хеш #
к URL? Есть ли возможность этого избежать?
javascript
angularjs
pikkvile
источник
источник
Ответы:
На самом деле вам нужен # (хэштег) для браузеров не HTML5.
В противном случае они просто сделают HTTP-вызов к серверу по указанному href. # - это старая короткая схема браузера, которая не запускает запрос, что позволяет многим js-фреймворкам создавать собственные клиентские перенаправления поверх этого.
Вы можете использовать
$locationProvider.html5Mode(true)
Angular для использования стратегии HTML5, если она доступна.Вот список браузеров, поддерживающих стратегию HTML5: http://caniuse.com/#feat=history
источник
Если вы включили html5mode, как говорили другие, и создайте
.htaccess
файл со следующим содержимым (с учетом ваших потребностей):Пользователи будут перенаправлены на ваше приложение, когда они введут правильный маршрут, и ваше приложение прочитает маршрут и выведет их на нужную «страницу» внутри него.
РЕДАКТИРОВАТЬ: Просто убедитесь, что имена файлов или каталогов не конфликтуют с вашими маршрутами
источник
/about
страницы происходит сбой, если я не захожу на нее через приложение.Давайте напишем ответ, который выглядит простым и коротким
спасибо @plus - за детализацию приведенного выше ответа
источник
пытаться
Больше информации на $ locationProvider
Использование $ location
источник
Следующая информация от:
https://scotch.io/quick-tips/pretty-urls-in-angularjs-removing-the-hashtag
Очень легко получить чистые URL и удалить хэштег из URL в Angular.
По умолчанию AngularJS будет направлять URL-адреса с помощью хэштега. Например:
http://www.example.com
http://www.example.com/#/about
http://www.example.com/#/contact
Есть 2 вещи, которые нужно сделать.
Настройка $ locationProvider
Настройка нашей базы для относительных ссылок
$ Location Service
В Angular служба $ location анализирует URL-адрес в адресной строке и вносит изменения в ваше приложение, и наоборот.
Я настоятельно рекомендую ознакомиться с официальными документами Angular $ location, чтобы получить представление о службе определения местоположения и ее услугах.
https://docs.angularjs.org/api/ng/service/$location
$ locationProvider и html5Mode
Мы сделаем это при определении вашего приложения Angular и настройке ваших маршрутов.
Что такое API истории HTML5? Это стандартизированный способ манипулирования историей браузера с использованием скрипта. Это позволяет Angular изменять маршрутизацию и URL-адреса наших страниц без обновления страницы. Для получения дополнительной информации об этом, вот хорошая статья API Истории HTML5:
http://diveintohtml5.info/history.html
Настройка для относительных ссылок
<base>
в<head>
документе. Это может быть в корневом файле index.html вашего приложения Angular. Найдите<base>
тег и задайте для него корневой URL-адрес, который вы хотите использовать в своем приложении.Например:
<base href="https://stackoverflow.com/">
Резервный вариант для старых браузеров
В заключение
источник
Если вы хотите настроить это локально на OS X 10.8, обслуживающей Angular с Apache, тогда вы можете найти следующее в вашем файле .htaccess:
Опции + FollowSymlinks, если не установлены, могут привести к запрещенной ошибке в журналах, например:
Требуется перезапись базы, в противном случае запросы будут разрешены к корневому каталогу вашего сервера, который локально по умолчанию не является каталогом вашего проекта, если вы специально не настроили свои vhosts, поэтому вам нужно задать путь, чтобы запрос нашел корневой каталог вашего проекта. Например, на моей машине у меня есть каталог / Users / me / Sites, где я храню все свои проекты. Как старая OS X настроена.
В следующих двух строках фактически указывается, является ли путь не каталогом или файлом, поэтому необходимо убедиться, что у вас нет файлов или каталогов, совпадающих с путями маршрутизации приложения.
Следующее условие говорит, что если запрос не заканчивается указанными расширениями, добавьте туда, что вам нужно
И последний [L] говорит, что нужно обслуживать файл index.html - ваше приложение для всех остальных запросов.
Если у вас все еще есть проблемы, проверьте журнал apache, он, вероятно, даст вам полезные советы:
источник
Использование режима HTML5 требует перезаписи URL на стороне сервера, в основном вы должны переписать все ваши ссылки на точку входа вашего приложения (например, index.html). Требование
<base>
тега также важно для этого случая, поскольку оно позволяет AngularJS различать часть URL-адреса, которая является базой приложения, и путь, который должен обрабатываться приложением. Для получения дополнительной информации см. Руководство разработчика AngularJS - Использование $ location в режиме HTML5 на стороне сервера .Обновить
Как: настроить сервер для работы с html5Mode 1
Когда у вас включен html5Mode,
#
персонаж больше не будет использоваться в ваших URL.#
Символ является полезным , поскольку он не требует настроек на стороне сервера. Без#
этого URL выглядит намного лучше, но он также требует переписывания на стороне сервера. Вот некоторые примеры:Apache переписывает
Nginx переписывает
Azure IIS переписывает
Экспресс переписывает
Смотрите также
источник
В Angular 6 с вашим роутером вы можете использовать:
источник
Вы также можете использовать приведенный ниже код для перенаправления на главную страницу (домой):
После указания вашего перенаправления, как указано выше, вы можете перенаправить другие страницы, например:
источник
**
** Потому что
источник