Угловое использование # в URL
В настоящее время я работаю над анализатором URL, который форматирует и исправляет относительные ссылки. Я обозначаю некоторые символы как особые и включаю "#".
Я обнаружил, что это становится проблемой, когда я обрабатываю страницы, разработанные с помощью Angular, потому что использует # в URL. Однако при чтении протокола IETF для именования URL кажется, что символы # являются зарезервированными.
Может кто-нибудь объяснить мне, как Angular взаимодействует с именами URL?
1 ответ
Стратегия маршрутизации
При настройке маршрутизации приложения в угловом проекте можно выбрать между обычной маршрутизацией HTML5 (PathLocationStrategy
) или маршрутизация "в стиле хэша" (HashLocationStrategy
).
По умолчанию PathLocationStrategy
но маршруты в хэш-стиле можно реализовать, передав {useHash: true}
в качестве второго параметра RouterModule.forRoot()
функция
В соответствии с официальной документацией Angular относительно LocationStrategy и стилей URL браузера:
Старые браузеры отправляют запросы на страницу на сервер, когда URL-адрес местоположения изменяется, если только это изменение не происходит после символа "#" (называемого "хэш"). Маршрутизаторы могут использовать это исключение, составляя URL-адреса маршрутов в приложении с помощью хэшей.
Почему Angular поддерживает маршруты хэширования
#
в URL представляет идентификатор привязки ( RFC1738) и очень полезен при ссылках на определенный контент на странице.
Какие угловые подвиги с HashLocationStrategy
тот факт, что любой контент после #
Символ не отправляется на сервер - что делает его идеальным для хранения состояния приложения.
Почему это полезно
С помощью хэш-маршрутов перезагрузите страницу (или пересмотрите закладку) на подстранице, например
http://localhost:4200/#/articles/35
не запрашивает сервер для подстраницы, а возвращает главную страницу приложения
http://localhost:4200/
Таким образом, серверная реализация должна знать только о корневой странице (это единственное, что когда-либо будет запрошено)
С использованием PathLocationStrategy
(по умолчанию) сервер должен быть настроен на обработку запросов для каждого URL, который реализует ваше приложение.