Зачем хэш и история
Для прогрессивных интерфейсных сред разработки, таких как 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