面試題:VueRouter中的 hash 模式和 history 模式有什麼區別
面試題:VueRouter中的 hash 模式和 history 模式有什麼區別
hash模式
- hash 模式的路由中帶有
#
號 - hash 模式通過
window.onhashchange
方法監聽路由的修改 - hash 模式在頁面重新整理的時候,傳送的請求 url 是不帶 # 後面的內容的
- hash 模式可以相容部分低版本的瀏覽器
- hash 模式打包後,直接在瀏覽器中開啟
/dist/index.html
可以正常的訪問(原因是第 3 條指出的原因)
history模式
- history 模式是使用正常的 url 路徑顯示
- history 模式通過
pushState
和replaceState
方式修改路由改變 - history 模式在頁面重新整理的時候,會請求當前位址列中完成的 url,這時需要伺服器對這個 url 有處理,如果沒有對應的檔案,需要返回 index.html
- history 模式因為是使用的 HTML5 的新規範,所以不能相容低版本的瀏覽器
- history 模式打包後,直接在瀏覽器中開啟
/dist/index.html
會報錯(原因是第 3 條指出的原因)
其他注意事向
- 有些 App 的分享是不支援
#
的,所以不能使用hash
模式
總結
區別 | hash模式 | history模式 |
---|---|---|
位址列表現 | 帶著 # 號 | 標準的 url 格式,不帶 # |
路由跳轉的實現 | window.onhashchange 監聽 hash 的改變 | pushState 或者 replaceState Api改變路由 |
頁面重新整理 | 請求的地址中不攜帶 # 後面的內容,所以不需要後端的配合,也不會出現 404 | 請求的是當前地址的完整路徑,需要伺服器做特殊處理,否則會出現 404 |
相容性 | 可以相容一些低版本的瀏覽器 | 不相容低版本瀏覽器 |
相關文章
- Vue-router 中hash模式和history模式的區別Vue模式
- hash和history兩種模式的區別模式
- Standards模式和Quirks模式有什麼區別?模式UI
- 手寫vueRouter-Hash模式Vue模式
- 前端框架路由實現的Hash和History兩種模式的區別前端框架路由模式
- 前端路由原理之 hash 模式和 history 模式前端路由模式
- hash和history路由的區別路由
- vue-router的hash模式和history模式詳解Vue模式
- 前端路由: hash & history 模式前端路由模式
- Python 正則模式中 search() 和 match() 有什麼區別?Python模式
- 面試題總結:Queue 中 poll()和 remove()有什麼區別?面試題REM
- adapter模式與Wrapper模式有什麼區別?APT模式APP
- Vue的mode中 hash 與 history 的區別Vue
- 面試題: Webpack 的 plugin 和 loader 有什麼區別面試題WebPlugin
- history與hash路由的區別路由
- history.go()和history.back()的區別是什麼Go
- 【Java面試】IO和NIO有什麼區別?Java面試
- 【Java面試】Mybatis中#{}和${}的區別是什麼?Java面試MyBatis
- java面試題之Thread的run()和start()方法有什麼區別Java面試題thread
- c++中&和&&有什麼區別C++
- 面試官:react和vue有什麼區別嗎?面試ReactVue
- WPF中的StaticResource和DynamicResource有什麼區別
- C# 中的 == 和 equals()有什麼區別?C#
- 工廠模式和抽象工廠的區別是什麼?模式抽象
- 請教各位老師:代理(Proxy)模式和介面卡(Adapter)模式有什麼區別呢?模式APT
- MVC模式和MVP模式的區別MVC模式MVP
- 測試面試題:cookie/session/token 分別表示什麼意思,有什麼區別?面試題CookieSession
- 面試官:Java的重寫和過載有什麼區別?面試Java
- *和body有什麼區別
- 面試突擊:MVCC 和間隙鎖有什麼區別?面試MVC
- 多執行緒面試題之sleep()和wait()方法有什麼區別?執行緒面試題AI
- php中const和define有什麼區別PHP
- java泛型中<?>和<T>有什麼區別?Java泛型
- C++中vector*和vector有什麼區別C++
- SQLAlchemy中filter()和filter_by()有什麼區別SQLFilter
- Keil中translate,build和rebuild有什麼區別Rebuild
- C# 中List中的Count和Count(),有什麼區別C#
- #如何看待問“a = a + b和a += b有什麼區別”的Java面試官?Java面試