Зачем хэш и история
Для прогрессивных интерфейсных сред разработки, таких как Vue, для созданияSPA (одностраничное приложение), необходимо внедрить фронтальную систему маршрутизации, в чем смысл существования Vue-Router. Ядро внешней маршрутизации лежит в——Изменить вид без запроса к бэкенду.
Для этого браузеры в настоящее время обеспечивают следующие два типа поддержки:
-
hash-- т.е. в адресной строке URL
#
символ (этот хэш не является хеш-операцией в криптографии).
Например, этот URL:http://www.abc.com/#/hello
, хэш-значение#/hello
. Его характеристики заключаются в том, что хотя хэш появляется в URL-адресе, он не будет включен в HTTP-запрос и вообще не повлияет на серверную часть, поэтому изменение хеша не приведет к перезагрузке страницы. -
history- Воспользуйтесь преимуществами нового интерфейса истории HTML5.
pushState()
иreplaceState()
метод. (Требуется поддержка определенного браузера)
Эти два метода применяются к стеку истории браузера в существующем в настоящее времяback
,forward
,go
Кроме того, они предоставляют возможность изменять историю. Просто когда они выполняют модификацию, хотя текущий URL-адрес меняется, браузер не сразу отправляет запрос на серверную часть.
Следовательно, можно сказать, что и режим хеширования, и режим истории относятся к характеристикам самого браузера, и Vue-Router использует только эти две характеристики (вызывая интерфейс, предоставляемый браузером) для реализации внешней маршрутизации.
сцены, которые будут использоваться
В общих сценариях можно использовать как хеш, так и историю, если вас больше не волнует внешний вид,#
Символы в URL выглядят некрасиво.
Если вам не нужны уродливые хэши, мы можем использовать режим истории маршрута, который полностью использует API history.pushState для завершения.
URL скачет без перезагрузки страницы. ——Официальный сайт Vue-маршрутизатора.
Кроме того, согласноMozilla Develop Networkзнакомство, звонокhistory.pushState()
по сравнению с прямой модификациейhash
, имеются следующие преимущества:
-
pushState()
Новый набор URL-адресов может быть любым URL-адресом того же происхождения, что и текущий URL-адрес; иhash
только модифицируемый#
Последняя часть, поэтому можно установить только URL-адрес того же документа, что и текущий URL-адрес; -
pushState()
Новый набор URL-адресов может точно совпадать с текущим URL-адресом, что также добавит запись в стек; иhash
Новый набор значений должен отличаться от исходного, чтобы инициировать действие по добавлению записи в стек; -
pushState()
пройти черезstateObject
Параметры могут добавлять в запись данные любого типа;hash
Можно добавлять только короткие строки; -
pushState()
Доступны дополнительные настройкиtitle
Свойства для последующего использования.
конечно,history
Не все хороши. Хотя SPA хорошо работает в браузерах, разница между ними возникает, когда вы действительно хотите инициировать HTTP-запросы к серверной части через URL-адреса. Особенно, когда пользователь вручную вводит URL-адрес, а затем нажимает Enter или обновляет (перезапускает) браузер.
-
hash
режим, толькоhash
Содержимое перед символом будет включено в запрос, напримерhttp://www.abc.com
, так что для бэкенда, даже если маршрут не полностью пройден, ошибка 404 возвращаться не будет. -
history
В режиме внешний URL-адрес должен совпадать с URL-адресом, который фактически инициирует запрос к серверной части, напримерhttp://www.abc.com/book/id
. Если в бэкенде отсутствует пара/book/id
Обработка маршрута вернет ошибку 404.Официальный сайт Vue-RouterЭто описывается как:«Однако, чтобы хорошо играть в этом режиме, ему также нужна поддержка фоновой конфигурации... Итак, вам нужно добавить ресурс-кандидат на сервер, который покрывает все ситуации: если URL-адрес не соответствует ни одному из статических ресурсов, он должен возвращать тот же index.html, эта страница является страницей, от которой зависит ваше приложение».
резюме
В сочетании с собственным примером, для общегоVue + Vue-Router + Webpack + XXXСоздавайте сценарии веб-разработки с помощьюhistory
Режима достаточно, просто выполните простую настройку маршрутизации на серверной части (Apache или Nginx) и поддержите страницу 404 с внешней маршрутизацией.
Перепечатано: https://segmentfault.com/q/1010000010340823